我需要检查字符串中的单词以查看其中是否包含数字,如果不是,请删除该单词。然后打印出修改后的字符串
这是我为解决问题而竭尽全力的方法,但由于我需要它而无法解决
void sentence_without_latin_character( std::string &s ) {
std::cout << std::endl;
std::istringstream is (s);
std::string word;
std::vector<std::string> words_with_other_characters;
while (is >> word) {
std::string::size_type temp_size = word.find(std::ctype_base::digit);
if (temp_size == std::string::npos) {
word.erase(word.begin(), word.begin() + temp_size);
}
words_with_other_characters.push_back(word);
}
for (const auto i: words_with_other_characters) {
std::cout << i << " ";
}
std::cout << std::endl;
}
答案 0 :(得分:2)
这部分没有按照您的想法去做:
word.find(std::ctype_base::digit);
std::string::find
仅搜索完整的子字符串(或单个字符)。
如果要在字符串中搜索一组某些字符,请改用std::string::find_first_of
。
另一种选择是使用std::isdigit
之类的东西来测试每个字符,可能使用std::any_of
之类的算法或一个简单的循环。
答案 1 :(得分:0)
正如Acorn所解释的,word.find(std::ctype_base::digit)
不会搜索第一位数字。 std::ctype_base::digit
是一个常数,指示特定std::ctype
方法的数字。实际上,您可以使用一个名为std::ctype
的{{1}}方法。
scan_is