C++ C++;从阵列复制到阵列

C++ C++;从阵列复制到阵列,c++,transliteration,C++,Transliteration,我尝试了很多解决这个问题的建议,但都没有成功 我有一个长度为1000的const char数组,名为english\u line,其中包含以空格分隔的单词。此数组被传递到函数中。根据我们的任务大纲,必须使用此功能来实现解决方案 我想将该数组的内容一次复制一个单词到另一个2D数组中,temp\u eng\u word char temp_eng_word[2000][50]; int j; string line = english_line; string word; istringstre

我尝试了很多解决这个问题的建议,但都没有成功


我有一个长度为1000的const char数组,名为english\u line,其中包含以空格分隔的单词。此数组被传递到函数中。根据我们的任务大纲,必须使用此功能来实现解决方案

我想将该数组的内容一次复制一个单词到另一个2D数组中,temp\u eng\u 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);
 }
}
我花了一天中最好的时间来解决这个问题;显然,我在这方面是个新手

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

使用
word.c_str()
std::string

另外,我不理解嵌套的
for
循环的意义,您可能希望改为执行类似的操作(使用
strncpy
复制最多49个
char
,如果需要,使用零填充,并确保字符串的最后一个
char
始终为零):


注意字符串和字符数组之间的区别。Char数组是一种简单的基本数据类型结构,而string实际上是一个具有更复杂结构的类。这就是为什么需要使用字符串的
c_str()
函数以字符数组的形式获取内容(也称为c-string)

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

1)循环计数错误(您应该更正数组知识)


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

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

std::string temp_eng_word;

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

对于条件
jI,您也认为程序中的逻辑有点不正确。现在,将第一个单词复制到数组的所有2000(或2001,如果不更改条件)条目中。然后将第二个字复制到数组的所有2000个条目中,覆盖第一个字。等等为什么要使用数组的数组?为什么不使用
std::string
std::vector
?最好使用带有push_-back的std::vector。。。那么你就不必关心大小了“我有一个长度为1000的常量字符数组,叫做english_line”,真的吗?不在这个代码中。您最好描述您试图解决的问题,而不是讨论2D数组等。您应该使用
std::string
来表示字符串。如果必须使用固定大小的字符数组,请小心检查字长。即使您将程序限制为非技术性英语,其中50个字符的长度足以容纳主流词典中的任何单词,英文文本也可能描述Llanfairpwlgwyngyllgogerychwyrndrobwllllantysiliogogogoch镇。如何仅在一个
字符串中存储
char*
数组?我想你指的是
字符串的数组
字符串
向量
;您还可以编写std::string temp=“abcd”<代码>温度[][]=“abcdef”
没有任何意义。OP有一个字符串,如
str[]=“这是一个句子”
,他将其拆分为多个字符串,如
result[0]=“this”
result[1]=“is”
,等等。因此
result
必须是
char[]
,或者是
string[]
,或
向量
。感谢您的建议:)请查看链接的代码。我尝试了你的第一个,在代码中,我打印到屏幕上进行测试。它跳过每行的第一个单词。每隔一行,它就会添加上一行的最后一个单词-更奇怪的事情也会发生。至于建议2,当输出到屏幕上时,它只打印出每行的第一个单词:我将休息一下,并尝试以更清晰的思路理解所有这些!谢谢你的建议——这给了我希望!:)
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;
}
vector<string> words;
istringstream iss(line, istringstream::in);
while(iss >> word)
{
    words.push_back(word);
}
copy(istream_iterator<string>(iss), istream_iterator<string>(), back_inserter(words));
std::string temp_eng_word;