测试字符串中的空格字符

Testing for a space character inside a string...?

本文关键字:空格 字符 字符串 测试      更新时间:2023-10-16

我正在尝试测试字符串中的字符是否为空格,并且我非常沮丧:

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

我没有得到任何错误,我已经在网上看了,但人们在不同的论坛上说这是如何测试一个空间。嗯。

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>());

将文件结束标记前的所有内容放入字符串。

这是因为cin在第一个空格处停止读取,所以您实际上不会读取整个句子,而是读取第一个单词。

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

另外,要测试是否存在空格,请使用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;
}