2017-10-09 239 views
-2

我有一个char数组,我可以根据需要将其转换为字符串。给定一个字符串,如何检查前几个字符是否是另一个字符串? C++

该字符串可以是一整个句子,但我只关心字符串的前6个字符,因为它们是我的程序的命令行为(添加/删除/删除等)。

我想知道,我会怎么做呢?要么检查前几个字符,要么只是评估字符或字符串数​​组中的第一个单词。

+2

您可能想要查看substr()方法以提取前6个字符,或者如果要在原地进行比较,则可以使用compare()方法。 – Steve

+0

'std :: strncmp'是一个选项 – vu1p3n0x

+0

“*或甚至更好,只是评估第一个单词*” - 从字符串创建一个std :: istreamstream',使用'operator >>'提取第一个单词它碰巧是)到一个'std :: string'中,然后使用'operator =='根据需要测试它的值 –

回答

0

例如,要比较S1 == S 2(0,10),这意味着字符串S2的前十个字符,使用SUBSTR()可以通过工作,就像这样:

s1 == s2.substr(0, 10); 

其中,s2.substr(POS,n)的意味着连续ñ字符串S2POS个位置开始。

另一个funtion也GOOT使用:

s1.compare(pos1, n1, s2); 

menas:比较N1字符字符串从s1的POS1位置开始,字符串2.您可以检出打开了该功能及其超载等五大funtions 。

0

要做到这一点,只需使用std::strncmp()。例如:

bool first_n_equal(const char *lhs, const char *rhs, size_t n) { 
    return (std::strncmp(lhs, rhs, n) == 0); 
} 

注意strncmp返回0,如果两个字符串相等,只会最多比较n字符。要选择n,您可以硬编码6,或循环查看字符串,并检查第一个单词结束的位置。例如,

size_t size_of_first_word(const char *str) { 
    size_t i; 
    for (i = 0; str[i] != ' ' && str[i] != '\0'; i++) {} 
    return i; 
} 

此函数遍历字符串,直到遇到空格或空终止符(字符串结尾)为止。然后,实际检查字符串命令:

size_t input_len = size_of_first_word(input_string); 
size_t command_len = size_of_first_word(command_string); 
size_t check_len = std::min(input_len, command_len); 
bool is_same = first_n_equal(input_string, command_string, check_len); 

我故意做出这种冗长,使其更容易理解,所以你绝对可以使此代码更小。您也可以使用std::string,但实际上并非必要。

相关问题