gpt4 book ai didi

c++ - 使用 scanf 进行输入过滤

转载 作者:行者123 更新时间:2023-11-28 03:34:48 27 4
gpt4 key购买 nike

我想过滤输入。我不知道什么是最好的方法。我希望阅读以 alpha-bates 开头的单词。例如,如果输入是:

This is 1 EXAMPLE1 input.

字符串应该是这样的:

This is  EXAMPLE1 input

像这样过滤输入的最简单方法是什么?

我尝试使用 "%[a-zA-Z]s",但它不起作用。

最佳答案

您的扫描字符串 "%[a-zA-Z]s" 可能不是您认为的那样。删除尾随的 s

"%[a-zA-Z]" 将扫描完全由大小写字母组成的字符串。所以数字会打折。但是,您想要扫描以小写或大写字母开头的字母数字字符串。 scanf 不提供以这种方式查找字符串的工具。相反,您可以使用 "%[a-zA-Z0-9]" 扫描字母数字字符串,如果字符串的第一个字符是数字,则丢弃扫描的输入。

由于各种原因,使用 scanf 很棘手。该字符串可能比您预期的要长,并导致缓冲区溢出。如果输入不是您期望的格式,则 scanf 可能无法通过意外输入。无条件地将输入读入缓冲区并解析缓冲区通常更可靠。例如:

const char *wants
= "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";
std::string word;
while (std::cin >> word) {
if (!isalpha(word[0])) continue;
std::string::size_type p = word.find_first_not_of(wants);
word = word.substr(0, p);
//... do something with word
}

关于c++ - 使用 scanf 进行输入过滤,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11278080/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com