циклы — Как проверить, содержит ли строка знаки препинания Переполнение стека

Я пытаюсь перебрать строку, чтобы проверить пунктуацию. Я пытался использовать ispunct (), но получаю сообщение об ошибке, что нет соответствующей функции для вызова ispunct. Есть ли лучший способ реализовать это?

for(std::string::iterator it = oneWord.begin(); it != oneWord.end(); it++)
{
if(ispunct(it))
{
}
}

0

Решение

it является итератором, он указывает на символ в строке. Вы должны разыменовать это, чтобы получить то, на что оно указывает.

if(ispunct(static_cast<unsigned char>(*it)))
4

Другие решения

Есть ли лучший способ реализовать это?

использование станд :: any_of:

#include <algorithm>
#include <cctype>
#include <iostream>

int main()
{
std::string s = "Contains punctuation!!";
std::string s2 = "No puncuation";
std::cout << std::any_of(s.begin(), s.end(), ::ispunct) << '\n';
std::cout << std::any_of(s2.begin(), s2.end(), ::ispunct) << '\n';
}

Живой пример

3

По вопросам рекламы [email protected]