-2

我想比较 C++ 中的两个字符串:

  1. 有一个getName()返回字符串的函数。
  2. 现在我可以写Out << getName();这将打印字符串。
  3. 但是,我只想在字符串的值是或其中N是整数时才打印字符串。如果它的值为, ,我不想打印它,其中N不是整数或空字符串。arpitarpit*N*arpitaarpitx

我知道这很容易做到,但我想用最少的行数做到这一点。

到目前为止我所做的是:

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();

UPDATE 1 getName()在遇到空格之前返回一个字符串,并且它不会返回任何行或 2 个或更多单词。

4

3 回答 3

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

其余的,你的代码有很多错误,不应该编译。特别是,没有什么可以getName() 返回可用于初始化 a char []; C++ 中字符串的类型是std::string,你的变量应该是:

std::string name1( getName() );
std::string name2( "arpit" );

(除了你需要更好的名字。例如,第二个可能类似于referenceor header。)

当然,isdigit使用char;调用是未定义的行为。你必须先转换为unsigned char

于 2013-11-15T12:04:06.130 回答
1
auto s = getName();
if(s.size() >= 5 && s.substr(0,5) == "arpit")
    Out << s;
于 2013-11-15T10:25:54.803 回答
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());
于 2013-11-15T10:26:03.227 回答