C++ 拆分一个句子,以便将每个单词添加到一个数组项中

C++ 拆分一个句子,以便将每个单词添加到一个数组项中,c++,arrays,split,C++,Arrays,Split,我有一个句子,我想拆分句子,以便将每个单词添加到一个数组项中。 我已经完成了以下代码,但仍然是错误的 string str = "Welcome to the computer world."; string strWords[5]; short counter = 0; for(short i=0;i<str.length();i++){ strWords[counter] = str[i]; if(str[i] == ' '){ counter++;

我有一个句子,我想拆分句子,以便将每个单词添加到一个数组项中。
我已经完成了以下代码,但仍然是错误的

string str = "Welcome to the computer world.";
string strWords[5];
short counter = 0;
for(short i=0;i<str.length();i++){
    strWords[counter] = str[i];
    if(str[i] == ' '){
        counter++;
    }
}
string str=“欢迎来到计算机世界。”;
字符串strWords[5];
短计数器=0;

对于(短i=0;i非常丑陋的做法,@Cyber已链接到最佳答案。但以下是您的“更正”版本:

string str=“欢迎来到计算机世界。”;
字符串strWords[5];
短计数器=0;

对于(短i=0;i非常丑陋的做法,@Cyber已链接到最佳答案。但以下是您的“更正”版本:

string str=“欢迎来到计算机世界。”;
字符串strWords[5];
短计数器=0;

对于(简短的i=0;i我在回答,因为您应该从错误中吸取教训:只需使用
+=
字符串运算符,您的代码就可以工作了:

// strWords[counter] = str[i];   <- change this
strWords[counter] += str[i];     <- to this

//strWords[counter]=str[i];我在回答这个问题,因为你应该从错误中吸取教训:只需使用
+=
字符串运算符,你的代码就会工作:

// strWords[counter] = str[i];   <- change this
strWords[counter] += str[i];     <- to this

//strWords[counter]=str[i];如评论中所述,有很多更方便的方法可以拆分字符串(
strtok
,std功能等),但是如果我们讨论您的示例,您不应该指定'str[i]'但是要附加它,因为它是要附加到当前单词的单个字符,如下所示:

string str = "Welcome to the computer world.";
string strWords[5];
short counter = 0;
for(short i=0;i<str.length();i++){
    if(str[i] == ' ' && !strWords[counter].empty()){
        counter++;
    }
    else {
        strWords[counter] += str[i];
    }
}
更新

因为我假设你是C++的新手,这里是你所拥有的空间问题的证明(如果你只使用加法运算符):

#包括
#包括
使用名称空间std;
int main(int argc,字符**argv)
{
string str=“欢迎来到计算机世界。”;
字符串strWords[5];
短计数器=0;

对于(注释中提到的短i=0;i),有很多更方便的方法来拆分字符串(
strtok
、std功能等),但是如果我们讨论您的示例,您不应该分配“str[i]”,而应该附加它,因为它是要附加到当前单词的单个字符,如下所示:

string str = "Welcome to the computer world.";
string strWords[5];
short counter = 0;
for(short i=0;i<str.length();i++){
    if(str[i] == ' ' && !strWords[counter].empty()){
        counter++;
    }
    else {
        strWords[counter] += str[i];
    }
}
更新

因为我假设你是C++的新手,这里是你所拥有的空间问题的证明(如果你只使用加法运算符):

#包括
#包括
使用名称空间std;
int main(int argc,字符**argv)
{
string str=“欢迎来到计算机世界。”;
字符串strWords[5];
短计数器=0;

对于(short i=0;i可能与@Cyber重复:我的问题与您认为我的问题类似的问题略有不同。我对此表示怀疑。您想在空格上拆分字符串。您碰巧想将它们添加到数组中,但更简单、更安全、更可扩展的解决方案是使用流将其解析为
v。)这是我的解决方案,用C++代码,没有华丽的功能:也可以复制@ @ Cyt:我的问题与你认为我的问题类似的问题略有不同。我怀疑。你想在空格上分割一个字符串。你碰巧想把它们添加到一个数组中,但是更容易、更安全、更容易。解决方案是使用一个流来解析它,使其变成<代码>向量。这里是我的解决方案,用C++代码,没有华丽的功能:谢谢,你的答案是最简单的答案。@狮子知道你在每个单词后面加上了空格,因为你在添加字符之后只检查了空格。关于当前单词?@Rudolfsfbundulis:谢谢你的提示。但是我看不到每个单词都有空格。@LionKing这不是提示:D如果你在代码中没有改变任何其他内容,而不是附加,那么你在
strWords
中的每个字符串中都有一个空格作为最后一个元素。请看我答案中的示例。@MarcoA。我的评论不是指空格It’这是对答案的冒犯,但更多的是为了提示作者理解他所写的算法:)谢谢你,你的答案是最简单的。@LionKing你知道你在每个单词后面都会有空格吗?因为你只有在把这个字符添加到当前单词后才检查空格?@RudolfsBundulis:谢谢你的提示。但是我看不到每个单词都有空格。@LionKing如果你改变,这不是提示:Dd代码中除了追加之外没有其他内容。在
strWords
中,每个字符串的最后一个元素都是空格。请看我答案中的示例。@MarcoA。我的评论并不是要冒犯答案,而是要提醒作者理解他编写的算法:)
string str = "Welcome to the computer world.";
vector<string> strWords;
string currentWord;
for(short i=0;i<str.length();i++){
    if(str[i] == ' ' && !currentWord.empty()){
       strWords.push_back(currentWord);
       currentWord.clear();
    }
    else {
        currentWord += str[i];
    }
}
#include <string>
#include <iostream>

using namespace std;

int main(int argc, char** argv)
{
    string str = "Welcome to the computer world.";
    string strWords[5];
    short counter = 0;
    for(short i=0;i<str.length();i++){
        strWords[counter] += str[i]; // Append fixed
        if(str[i] == ' '){
            counter++;
        }
    }
    for(short i=0;i<5;i++){
        cout << strWords[i] << "(" << strWords[i].size() << ")" << endl;
    }
    return 0;
}