с помощью поиска, чтобы проверить, если у меня есть подчеркивания в строке

0

im заголовок несколько проблем в моей программе, но вот один из них. Я хочу, чтобы мой код проверял, есть ли два или более символа подчеркивания в одной строке рядом друг с другом, пример>

lol__lol, lol___lol, etc...

должен ли я это делать, пока? вот мой фактический код, который работает только для проверки, когда я помещаю такие символы подчеркивания>

_lol_ 

поэтому первый и последний символы _ и они не могут, поэтому он работает, потому что я получаю вывод "Chyba - error"

std::string::size_type n;
std::string const ss = slovo;

n  = ss.find('_');

// kontrola podtrznika
if ((ss[0] >= 'A' && ss[0] <= 'Z') && ss[1] == '_')
{
    cout << "chyba" << endl;
}

if ( !ss.empty() && ss[0] == '_' && ss[ss.length() - 1] == '_' )
{
    cout << "chyba" << endl;
}

if ( ss.length() > 3 && ss.find( "__", 1, ss.length() - 2 ) != std::string::npos )
{
    cout << "chyba" << endl;
}

if (n == std::string::npos)
{
    string s = transform(slovo);
    cout << s << endl;
}
else
{
    string s = untransform(slovo);
    cout << s << endl;
}
Теги:
find

2 ответа

2
Лучший ответ

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

Конечно, достаточно:

if (slovo.find("__") != slovo.npos) {
   // ...
}
  • 0
    а что если я наберу больше двух знаков подчеркивания?
  • 1
    @feri как насчет этого? Если он имеет более двух последовательных подчеркиваний, он также имеет два. Так что этот тест работает.
Показать ещё 2 комментария
0

Неясно, будете ли вы определять, что строка содержит внутри него два или более подчеркивания, например

"A__B"

или вы собираетесь проверить, есть ли, по крайней мере, два смежных подчеркивания, например

"__A" или "A__"

Для этих двух случаев следует использовать два разных подхода.

Во втором случае вы можете просто использовать следующий вызов

ss.find( "__" );

В первом случае задача сложнее. Сначала вы должны найти первый символ, который не является подчеркиванием. Затем вам нужно найти последний символ, который не является подчеркиванием, и после этого применить функцию find as

ss.find( "__", start_position, length_of_substring );

Ещё вопросы

Сообщество Overcoder
Наверх
Меню