我一直在对coderbyte进行编程挑战,而在做一个问题时遇到了问题。我想从一个字符串中隔离一个单词,对它进行一些检查,然后转移到另一个单词。我要发布的代码应该只取第一个单词并在屏幕上打印出来。当我运行它时,它不会打印任何东西。我想也许我在while循环中做错了所以我做了一个简单的测试。假设我的输入是“这是一个测试句子”而不是单词(在cout中),我输入单词[0]。然后打印“T”就好了。你能找到问题所在吗?
#include <iostream>
#include <string>
using namespace std;
int Letters(string str) {
int i=0;
int len=str.length();
string word;
while(i<len){
if(isspace(str[i])){word[i]='\0'; break;}
word[i]=str[i];
i++;
}
cout<<word;
return 0;
}
int main() {
int test;
string str;
getline(cin, str);
test=Letters(str);
return 0;
}
答案 0 :(得分:5)
string word;
是默认构造的,最初为空。在while
循环内,您尝试执行以下操作:
word[i] = str[i];
这意味着您尝试访问尚未分配的内存,从而导致未定义的行为。
尝试:
word.append(str[i]);
答案 1 :(得分:1)
您可以使用更简单的方法从C ++中输入单词。它将帮助您避免将来出现错误。
#include <iostream>
using namespace std;
int main()
{
string word;
while(cin >> word)
{
// "word" contains one word of input each time loop loops
cout << word << endl;
}
return 0;
}