繁体   English   中英

使用scanf输入过滤

[英]Input filtering using scanf

我想过滤输入。 我不知道最好的方法是什么。 我想要读取以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
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM