Как найти слово, которое содержит цифры в строке - PullRequest
0 голосов
/ 16 декабря 2018

Мне нужно проверить слова внутри строки, чтобы увидеть, содержит ли любое из них цифры, а если нет - стереть это слово.Затем распечатайте измененную строку

Вот моя попытка решить проблему, но она не работает, так как мне нужно

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 голосов
/ 16 декабря 2018

Как объяснил Acorn, word.find(std::ctype_base::digit) не ищет первую цифру.std::ctype_base::digit - это константа, которая обозначает цифру для конкретных std::ctype методов.На самом деле есть метод std::ctype с именем scan_is, который вы можете использовать для этой цели.

void sentence_without_latin_character( std::string &s ) {
  std::istringstream is (s);
  std::string word;

  s.clear();
  auto& ctype = std::use_facet<std::ctype<char>>(std::locale("en_US.utf8"));
  while (is >> word) {
    auto p = ctype.scan_is(std::ctype_base::digit, word.data(), &word.back()+1);
    if (p == &word.back()+1) {
      s += word;
      if (is.peek() == ' ') s += ' ';
    }
  }

  std::cout << s << std::endl;
}
0 голосов
/ 16 декабря 2018

Эта часть не выполняет то, что вы думаете:

word.find(std::ctype_base::digit);

std::string::find ищет только полные подстроки (или отдельные символы).

Еслиесли вы хотите найти набор символов в строке, используйте std::string::find_first_of.

Другой вариант - проверка каждого символа с использованием чего-то вроде std::isdigitвозможно с алгоритмом типа std::any_of или с простым циклом.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...