使用find来检查,如果我在字符串中有下划线

时间:2014-02-03 12:37:58

标签: c++ find

我在我的程序中遇到了几个问题,但这里有一个问题。 我希望我的代码检查一个字符串中是否有两个或更多下划线彼此相邻, 示例>

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

2 个答案:

答案 0 :(得分:2)

您的代码似乎过于复杂,除非您误导您的要求。

以下就足够了:

if (slovo.find("__") != slovo.npos) {
   // ...
}

答案 1 :(得分:0)

目前尚不清楚您是否要确定字符串中包含两个或更多下划线,例如

“A__B”

或者您要检查是否至少有两个相邻的下划线,例如

"__A""A__"

对于这两种情况,应该使用两种不同的方法。

在第二种情况下,您只需使用以下调用

ss.find( "__" );

在第一种情况下,任务更加困难。首先,你应该找到第一个不是下划线的字符。然后你需要找到不是下划线的最后一个字符,之后应用函数find as

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