如何查找字符串中包含数字的单词

时间:2018-12-16 19:45:43

标签: c++ string vector

我需要检查字符串中的单词以查看其中是否包含数字,如果不是,请删除该单词。然后打印出修改后的字符串

这是我为解决问题而竭尽全力的方法,但由于我需要它而无法解决

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;
}

2 个答案:

答案 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