测试字符串内的空格字符...?

发布于 2024-11-04 22:09:18 字数 380 浏览 0 评论 0原文

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

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

我没有收到任何错误,并且我在网上查看过,但是不同论坛上的人们说这是测试的方法一个空间。呃。

I'm trying to test if a character in a string is a space, and I'm getting extremely frustrated:

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

I'm not getting any errors and I've looked online, but people on different forums say this is how to test for a space. Uh.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

诗化ㄋ丶相逢 2024-11-11 22:09:18

当您说

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

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

when you say

cin >> my_string;

you are taking formatted input. std::cin discards any whitespace in that line, and it reads up to and yields only a single word.

try instead

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

to get a single line, or

#include <iterator>

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

to get everything up to an end-of-file mark into the string.

我乃一代侩神 2024-11-11 22:09:18

那是因为 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;
        }
    }

Thats because cin stops reading at the first whitespace so you never actually read the entire sentence but the first word. Use getline instead.

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;
        }
    }
断肠人 2024-11-11 22:09:18

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

Additionnally to test whether a space is present use 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;
}
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文