0

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

This is 1 EXAMPLE1 input.

字符串应该是这样的:

This is  EXAMPLE1 input

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

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

4

1 回答 1

2

您的扫描字符串"%[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
}
于 2012-06-30T22:30:31.937 回答