2014-12-07 37 views
-3

我想創建一個字符串的二維數組,其中將包括用戶輸入的值。創建二維數組的字符串,值將由用戶輸入在C++

我得到在Visual Studio 2013的一些錯誤說沿着線的東西:

no suitable conversion function found from 'std::string' to 'const char*' exists. 

這裏就是我想要做的事:

#include <iostream> 
#include <string> 

using namespace std; 

int main() {   
    string stringOne, stringTwo, stringThree, stringFour, stringFive; 
    const char *myStrings[][5] = { stringOne, 
            stringTwo, 
            stringThree, 
            stringFour, 
            stringFive }; 
    return 0; 
} 
+1

爲什麼不能簡單['的std ::陣列 myStrings = {...};'](http://en.cppreference.com/w/cpp/container/array)? – 2014-12-07 16:14:06

+1

@onderbakirtas還有什麼你想創建? – 2014-12-07 16:14:15

+0

你應該聲明它像char myStrings [size1] [size2];請參閱http://en.wikibooks.org/wiki/C_Programming/Arrays – user1658435 2014-12-07 16:15:03

回答

-1

這是很難理解你想要什麼。也許你的意思了:)

#include <vector> 
#include <array> 
#include <string> 

//... 


std::vector<std::array<std::string, 5>> myStrings; 

下面是這種方法的一個例子

#include <iostream> 
#include <vector> 
#include <array> 
#include <string> 

int main() 
{ 
    std::vector<std::array<std::string, 5>> myStrings; 

    myStrings.push_back({ "FirstString", "SecondString", "ThirdString", 
          "FourthString", "FifthString" }); 

    std::string firstString("FirstString"); 
    std::string secondString("SecondString"); 
    std::string thirdString("ThirdString"); 
    std::string fourthString("FourthString"); 
    std::string fifthString("FifthString" ); 

    myStrings.push_back({ firstString, secondString, thirdString, 
          fourthString, fifthString }); 

    for (const auto &a : myStrings) 
    { 
     for (const auto &s : a) std::cout << s << ' '; 
     std::cout << std::endl; 
    } 

    return 0; 
} 

輸出是

FirstString SecondString ThirdString FourthString FifthString 
FirstString SecondString ThirdString FourthString FifthString 

所以你會得到的對象的五列的表鍵入std::string

+0

是不是涉及用戶輸入的_question_? – 2014-12-07 16:32:31

1

您應該在C++中使用向量而不是數組。您可以初始化一個嵌套向量是這樣的:

std::vector<std::vector<std::string>> v = { 
    { stringOne, stringTwo, stringThree, stringFour, stringFive } 
}; 

如果你從用戶獲得輸入,你不必使用五種不同的字符串變量。相反,您可以使用push_back來增加矢量的大小。是這樣的:

std::vector<std::vector<std::string>> v(5); 
std::size_t row = 0; 
std::size_t column = 0; 
std::string input; 
while (std::cin >> input) 
{ 
     if (row++ < 5) 
      v[column].push_back(input); 
     else 
     { 
      row = 0; 
      column++; 
     } 
} 
+0

代碼具有未定義的行爲,因爲您正在使用對「v」中不存在的元素的引用。 – Snps 2014-12-07 16:40:08

+0

@snps好吧不再是一個問題。 – user4334484 2014-12-07 16:42:11

相關問題