2014-12-07 56 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

相关问题