【发布时间】:2011-02-04 06:17:34
【问题描述】:
问题是我想逐个比较字符串中的字符:对于每个字符,它是否属于字母表?是小写还是大写。我怎么能这样做?
这很好,如果我想将它与 (+-*^) 进行比较,就像没有标准函数一样。 请帮帮我
【问题讨论】:
标签: c++ comparison character
问题是我想逐个比较字符串中的字符:对于每个字符,它是否属于字母表?是小写还是大写。我怎么能这样做?
这很好,如果我想将它与 (+-*^) 进行比较,就像没有标准函数一样。 请帮帮我
【问题讨论】:
标签: c++ comparison character
#include <cctype>
#include <string>
...
for (std::string::const_iterator i = s.begin(); i != s.end(); ++i)
if (std::isalpha(*i))
handle_alphabetic_character(*i);
else
handle_non_alphabetic_character(*i);
编辑新要求:
要在任意字符集中查找字符,您可以使用 str::find() 作为 James MeNellis 在他的答案中的文档,或者干脆......
#include <cstring>
for (std::string::const_iterator i = s.begin(); i != s.end(); ++i)
if (std::strchr("*+{\\&", *i))
handle_matching_character(*i);
else
handle_non_matching_character(*i);
【讨论】:
您可以轻松使用std::find 算法:
const std::string alphabet = "abcdefghijklmnopqrstuvwxyz";
bool is_in_alphabet
= std::find(alphabet.begin(), alphabet.end(), 'c') != alphabet.end();
或者,如果字母字符已排序,您可以使用std::binary_search,但除非字母表中有大量字符(即,超过 26 个),否则线性搜索可能会快得多。字符小,比较容易。
【讨论】:
std::binary_search,而在这两种情况下,std::find 的性能要高得多。