Используя тип std::string
для принятия предложения для практики (я не работал со строками в C++ очень), я проверяю, является ли символ гласным или нет. Я получил это:
for(i = 0; i <= analyse.length(); i++) {
if(analyse[i] == 'a' || analyse[i] == 'e' [..etc..]) {
...vowels++;
} else { ...
...consonants++;
}
Это хорошо работает, если строка является всем одним словом, но второе я добавляю пространство (IE: aeio aatest), это будет только считать первый блок и считать пространство как согласный и выходить из чтения предложения (выходящий для цикла или чего-то).
Пространство не рассчитывает как никакой символ == пустой указатель? Или некоторая причуда с std::string
?, было бы полезно знать, почему это происходит!
Править: Я просто принимаю строку через станд.:: cin, такой как:
std::string analyse = "";
std::cin >> analyse;
Я бы предположил, что вы читаете свою строку с помощью чего-то вроде ваш_поток >> ваша_строка;
. Оператор >>
для строк определен для работы (примерно) так же, как scanf
для %s
, который читает до тех пор, пока не встретит пробельные символы - поэтому operator>>
делает то же самое.
Вместо этого вы можете прочитать всю строку ввода с помощью std::getline
. Вы также можете посмотреть ответ, который я опубликовал на предыдущий вопрос (в нем приведены некоторые альтернативы std::getline
).
Я не могу сказать по коду, который вы вставили, но я собираюсь рискнуть и предположить, что вы вводите строку, используя оператор извлечения потока ( поток >> строка).
Оператор извлечения потока останавливается, когда встречает пробел.
Если это не то, что происходит, не могли бы вы показать нам, как вы заполняете свою строку и каково ее содержимое?
Если я прав, тогда вам понадобится другой метод чтение содержимого в строку. std :: getline (), вероятно, самый простой способ чтения из файла. Он останавливается на новой строке, а не на пробеле.
Редактировать на основе отредактированного вопроса: используйте это (дважды проверьте синтаксис. Я не перед моим компилятором.):
std::getline(std::cin, analyze);
Это должно прекратить чтение, когда вы нажимаете "ввод".
Оператор >>
на istream разделяет строки по пробельным символам. Если вы хотите получить целую строку, вы можете использовать readline(cin,destination_string)
.
Если вы хотите прочитать всю строку (включая пробелы), то вам следует читать с помощью getline. Схематично это выглядит так:
#include <string>
istream& std::getline( istream& is, string& s );
Чтобы прочитать всю строку, вы делаете что-то вроде этого:
string s;
getline( cin, s );
cout << "You entered " << s << endl;
PS: слово "согласный", а не "согласный".