2014-09-24 86 views
0

我一直在做coderbyte编程挑战,并在做一个,遇到问题。我想从字符串中分离一个单词,对它进行一些检查,然后移动到另一个单词。我要发布的代码应该只显示第一个单词并将其打印在屏幕上。当我运行它时,它不会打印任何东西。我认为,也许我在while循环中做了错误的事情,所以我做了一个简单的测试。假设我的输入是“This is a test sentence”,而不是单词(在cout中),我输入word [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

将word [i] = str [i];改为['word.append(str [i]);'](http://en.cppreference.com/w/cpp/string/basic_string的/附加)。你没有保留'word'的空间,所以你不能访问'word [i]'。 – 2014-09-24 15:14:50

+1

你有未定义的行为。提示 - 'word [i] = str [i]' – 2014-09-24 15:14:52

回答

5
string word; 

是默认构造,其初始化为空。里面while循环,你试图做的事:

word[i] = str[i]; 

这意味着你试图访问尚未分配,导致不确定的行为内存。

尝试:

word.append(str[i]); 
+2

'word [i] ='\ 0';'也应该删除。 – Jarod42 2014-09-24 15:17:49

+0

@ Jarod42是的,很好 – taocp 2014-09-24 15:18:30

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