0

我已经尝试了很多关于这个问题的建议解决方案,但都没有成功。

我有一个长度为 1000 的 const char 数组,称为english_line,其中包含由空格分隔的单词。这个数组被传递给一个函数。根据我们的任务简介,必须使用此功能来实施解决方案。

我想将该数组的内容一次一个单词复制到另一个二维数组temp_eng_word

char temp_eng_word[2000][50];
int j;

string line = english_line;
string word;

istringstream iss(line, istringstream::in);
while (iss >> word)
{
for (j=0;j<=2000;j++)
 {
 strcpy(temp_eng_word[j],word);
 }
}

`

当我运行它时,我收到错误:

cannot convert 'std::string* *{aka std::basic_string(char)}' to 'const char*' for argument '2' to 'char* strcpy(char*, const char*)'

我花了一天中最好的时间来解决这个问题。显然我是一个相对新手。

任何提示或建议将不胜感激:)

4

4 回答 4

2

word.c_str()用来const char*摆脱_std::string

另外,我不明白你的嵌套for循环的意义,你可能想要做这样的事情(如果需要的话,用零填充strncpy复制最多 49 个,并确保字符串的最后一个始终为零):charchar

istringstream iss(line, istringstream::in);
int nWord = 0; 
while( (nWord < 2000) && (iss >> word) )
{
    strncpy(temp_eng_word[nWord], word.c_str(), 49);
    temp_eng_word[nWord][49] = '\0'; /* if it's not already zero-allocated */
    ++nWord;
}

请注意,使用它std::vector<std::string>来存储您的单词会更简单:

vector<string> words;
istringstream iss(line, istringstream::in);
while(iss >> word)
{
    words.push_back(word);
}

这可以在没有循环的情况下使用std::copy

copy(istream_iterator<string>(iss), istream_iterator<string>(), back_inserter(words));
于 2013-05-07T08:15:27.720 回答
0

注意字符串和字符数组之间的区别。字符数组是一种基本数据类型的简单结构,而字符串实际上是一个结构更复杂的类。这就是为什么您需要使用c_str()字符串的函数来将内容作为 char 数组(又名 C 字符串)来获取。

您还应该注意到在其输出数组的末尾c_str()添加了空终止(附加字符'\0')。

于 2013-05-07T08:41:51.230 回答
0

1)循环计数错误(你应该纠正你的数组知识)

2) string::c_str() 将 std::string 转换为 char*

于 2013-05-07T08:42:03.400 回答
0

您可以使用string 而不是该数组temp_eng_word。喜欢,

std::string temp_eng_word;

希望这能解决您的问题。并且循环不正确。请检查一下,因为您使用的是二维数组。

于 2013-05-07T09:43:40.873 回答