拆分一个句子,以便在数组项中添加每个单词

时间:2014-10-17 12:17:21

标签: 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++;
    }
}

3 个答案:

答案 0 :(得分:2)

我回答你应该从错误中吸取教训:只需使用+=字符串运算符,您的代码就可以运行:

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

删除空格(如果你不想附加它们)只需更改空格检查的顺序,例如:

for (short i = 0; i<str.length(); i++){
    if (str[i] == ' ')
        counter++;
    else
        strWords[counter] += str[i];
}

无论如何我建议使用重复的链接Split a string in C++?

答案 1 :(得分:1)

非常难看的方式,@ Cyber​​与最佳答案挂钩。但是,这是你的纠正&#34;版本:

string str = "Welcome to the computer world.";
string strWords[5];
short counter = 0;

for(short i=0;i<str.length();i++){
    if(str[i] == ' '){
        counter++;
        i++;
    }
    strWords[counter] += str[i];
}

答案 2 :(得分:0)

正如评论中所提到的,有很多更方便的方法来分割字符串(strtok,标准功能等),但如果我们谈论你的样本,你不应该分配&# 39; STR [1]&#39;但附加它,因为它是一个单个字符,你想要附加到当前单词,如下所示:

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];
    }
}

但是这只适用于给定的输入数据,因为如果你有超过五个单词,你可以访问数组strWords外边界。请考虑使用以下代码:

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];
    }
}

<强>更新

由于我假设您是C ++的新手,以下是您所拥有的空间问题的演示(如果您只使用加法运算符):

#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;
}

结果:

Space at the end of each string