2014-09-24 3 views
0

Я занимаюсь программированием на кодербайте, а во время его выполнения столкнулся с проблемой. Я хочу изолировать слово от строки, выполнить некоторые проверки, а затем перейти к другому слову. Код, который я собираюсь опубликовать, должен взять только первое слово и распечатать его на экране. Когда я запускаю его, он ничего не печатает. Я думал, что, возможно, я сделал что-то не так в цикле while, поэтому я сделал простой тест. Скажем, мой ввод «Это тестовое предложение», а вместо слова (в cout), я набираю слово [0]. Затем он печатает «Т» просто отлично. Вы можете найти, в чем проблема?Строка не печатает

#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

Изменить слово '[I] = ул [I];' на [ 'word.append (ул [I]);'] (http://en.cppreference.com/w/cpp/string/basic_string/добавление). Вы не сохранили пространство для 'word', поэтому вы не можете получить доступ к' word [i] '. –

+1

У вас есть неопределенное поведение. Подсказка - 'word [i] = str [i]' –

ответ

5
string word; 

является по умолчанию, в котором пусто изначально. Внутри while петли, вы пытались сделать:

word[i] = str[i]; 

Это означает, что вы пытались получить доступ к памяти, которая не была выделена, в результате чего непредсказуемое поведение.

Try:

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

'word [i] = '\ 0';' также должно быть удалено. – Jarod42

+0

@ Jarod42 Да, хороший улов – taocp

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; 
} 
Смежные вопросы