我想比较C ++中的两个字符串:
getName()
返回一个字符串。Out << getName();
这将打印字符串。arpit
或arpit*N*
,其中 N 是一个整数。我不想要打印它,如果它的值为arpita
,arpitx
,其中 N 不是整数或空字符串。 我知道这可以轻松完成,但我希望在最少的行数中完成此操作。
到目前为止,我所做的是:
char name1[] = getName();
char name2[] = "arpit";
for (int x = 0; x <= 4; x++){
if (name1[x] == name2[x]) continue;
else return ( Out << "not equal") ;
}
while(name1[x] ! = "\0"){
if(isdigit(name1[x])
x++;
else return (Out << "not equal") ;
}
Out << getName();
更新1
getName()
返回一个字符串,直到遇到空格,并且不会返回任何行或2个或更多单词。
答案 0 :(得分:2)
如果你有C ++ 11:
static std::regex const matcher( "arpit\\d*" );
if ( regex_match( name, matcher ) ) {
// matches...
}
如果您没有C ++ 11,则boost :: regex几乎完全相同。
如果您没有C ++ 11,则无法使用boost:
if ( name1.size() >= name2.size()
&& std::equal( name2.begin(), name2.end(), name1.begin() )
&& std::find_if( name1.begin() + name2.size(),
name1.end(),
[]( unsigned char ch ) { return !isdigit( ch ); }
) == name1.end() )
// matches...
}
对于其他人,您的代码有很多错误,不应该
编译。特别是,{em>没有 getName()
可以返回可用于初始化char []
的内容;该
C ++中字符串的类型是std::string
,以及您的变量
应该是:
std::string name1( getName() );
std::string name2( "arpit" );
(除了你需要更好的名字。第二个可能是
例如reference
或header
之类的内容。)
当然,用isdigit
调用它是未定义的行为
一个char
;您必须先转换为unsigned char
。
答案 1 :(得分:1)
auto s = getName();
if(s.size() >= 5 && s.substr(0,5) == "arpit")
Out << s;
答案 2 :(得分:0)
std::set<std::string> m_allowed_strings;
std::string validate_string(const string & s)
{
if(m_allowed_strings.find(s) != m_allowed_strings.end())
return s;
return "";
}
cout << validate_string(getName());