Тестирование пробела внутри строки ...? - PullRequest
1 голос
/ 04 мая 2011

Я пытаюсь проверить, является ли символ в строке пробелом, и я очень расстроен:

string my_string;
cin >> my_string;
for (int i = 0; i < my_string.length(); i++)
    {
        if (my_string[i] == ' ') // this never becomes true...
        {
            cout << "this text should pop, but never does" << endl;
        }
    }

Я не получаю никаких ошибок, и я посмотрел онлайн,но люди на разных форумах говорят, что это как проверить пространство.Мм.

Ответы [ 3 ]

8 голосов
/ 04 мая 2011

когда вы говорите

cin >> my_string;

вы принимаете форматированный ввод .std::cin удаляет все пробелы в этой строке и читает до и выдает только одно слово.

вместо этого попробуйте

std::string my_string;
std::getline(std::cin, my_string);

, чтобы получить одну строку, или

#include <iterator>

// ...
std::string my_string((std::istreambuf_iterator<char>(std::cin)),
                      std::istreambuf_iterator<char>());

чтобы получить все до метки конца файла в строке.

5 голосов
/ 04 мая 2011

Это потому, что cin перестает читать с первого пробела, так что вы фактически никогда не читаете всего предложения, кроме первого слова.Вместо этого используйте getline.

std::string my_string;
std::getline(std::cin, my_string);
for (int i = 0; i < my_string.length(); i++)
    {
        if (my_string[i] == ' ') // this never becomes true...
        {
            std::cout << "this text should pop, but never does" << std::endl;
        }
    }
2 голосов
/ 04 мая 2011

Дополнительно для проверки наличия пробела используйте std::string::find!

std::string my_string;
std::cin >> my_string; // please do not use « using namespace std; » if possible
size_t space_position = my_string.find(' ');
if(space_position != std::string::npos)
{
    std::cout << "found space" << std::endl;
}
...