字符串不会打印

时间:2014-09-24 15:13:00

标签: c++ string cout

我一直在对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;
}

2 个答案:

答案 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;
}