2013-05-07 112 views
0

我已经尝试了很多针对此问题的建议解决方案,但都没有成功。C++从数组复制到数组

我有一个长度为1000的常量字符数组,名为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*)' 

我花了一天的最好的部分只是试图做这个问题;显然我是这个相对的新手。

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

+0

在'for'循环中有条件'j <= 2000',你将循环一次到多次。 – 2013-05-07 08:16:21

+0

我也认为你的程序中的逻辑有点偏离。现在,将第一个单词复制到数组的所有2000(或2001,如果不更改您的条件)条目。然后,将第二个单词复制到数组的所有2000个条目中,覆盖第一个单词。等等。为什么使用数组数组?为什么不是'std :: string'的std :: vector? – 2013-05-07 08:18:53

+0

更好地使用std :: vector with push_back ...然后你不必关心大小 – Mario 2013-05-07 08:19:37

回答

2

使用word.c_str()获得const char*std::string

同样的,我不明白你的嵌套循环for的时候,您可能希望而不是做这样的事情(使用strncpy如果需要最大的49 char复制与补零,并确保该字符串的最后char总是零):

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)); 
+0

感谢您的建议:) 请参阅链接的代码。 http://pastebin.com/xumTLKU0 我试了你的第一个,在代码中,我打印到屏幕上进行测试。 它跳过每一行上的第一个单词。 每隔一行,它会添加上一行的最后一个单词! 后面的事情也会发生。 对于建议2,当输出到屏幕上时,它只打印每行中的第一个字: 我会休息一下,并尝试用一个更清晰的头脑来理解这一切!感谢提示 - 它给了我希望! :) – user2357438 2013-05-07 17:59:54

0

注串和字符的区别阵列。 char数组是一个基本数据类型的简单结构,而string实际上是一个具有更复杂结构的类。这就是为什么你需要使用字符串的c_str()函数来获取字符数组(a.k.a C字符串)的内容。

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

0

1)循环计数错误(请更正阵列知识)

2)字符串:: c_str()转换的std :: string到char *

0

可以使用string,而不是该数组temp_eng_word。像,

std::string temp_eng_word; 

希望能解决你的问题。循环不正确。请检查,因为你正在使用二维数组。

+0

如何将'char *'数组存储在一个'string'中?我想你的意思是一串“串”或“字符串”的“矢量”。 – zakinster 2013-05-07 09:45:05

+0

如果可以存储,temp [] [] =“abcdef”;你也可以写std :: string temp =“abcd”; – 2013-05-07 09:53:22

+0

'temp [] [] =“abcdef”'没有任何意义。 OP有一个字符串,比如'str [] =“这是一个句子”',并且将它分成多个字符串,比如'result [0] =“this”','result [1] =“is”',等等。所以'result'必须是'char [] []','string []'或者矢量'。 – zakinster 2013-05-07 10:10:48