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;
}
Ваш код кажется очень сложным, если вы не вводите в заблуждение в своих требованиях.
Конечно, достаточно:
if (slovo.find("__") != slovo.npos) {
// ...
}
Неясно, будете ли вы определять, что строка содержит внутри него два или более подчеркивания, например
"A__B"
или вы собираетесь проверить, есть ли, по крайней мере, два смежных подчеркивания, например
"__A"
или "A__"
Для этих двух случаев следует использовать два разных подхода.
Во втором случае вы можете просто использовать следующий вызов
ss.find( "__" );
В первом случае задача сложнее. Сначала вы должны найти первый символ, который не является подчеркиванием. Затем вам нужно найти последний символ, который не является подчеркиванием, и после этого применить функцию find as
ss.find( "__", start_position, length_of_substring );