我有一个句子,我想拆分句子,以便在数组项中添加每个单词 我已经完成了以下代码,但它仍然是错误的。
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++;
}
}
答案 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;
}
结果: