我有一个char数组,我可以根据需要将其转换为字符串。给定一个字符串,如何检查前几个字符是否是另一个字符串? C++
该字符串可以是一整个句子,但我只关心字符串的前6个字符,因为它们是我的程序的命令行为(添加/删除/删除等)。
我想知道,我会怎么做呢?要么检查前几个字符,要么只是评估字符或字符串数组中的第一个单词。
我有一个char数组,我可以根据需要将其转换为字符串。给定一个字符串,如何检查前几个字符是否是另一个字符串? C++
该字符串可以是一整个句子,但我只关心字符串的前6个字符,因为它们是我的程序的命令行为(添加/删除/删除等)。
我想知道,我会怎么做呢?要么检查前几个字符,要么只是评估字符或字符串数组中的第一个单词。
例如,要比较S1 == S 2(0,10),这意味着字符串S2的前十个字符,使用SUBSTR()可以通过工作,就像这样:
s1 == s2.substr(0, 10);
其中,s2.substr(POS,n)的意味着连续ñ字符串S2的POS个位置开始。
另一个funtion也GOOT使用:
s1.compare(pos1, n1, s2);
menas:比较N1字符字符串从s1的POS1位置开始,字符串2.您可以检出打开了该功能及其超载等五大funtions 。
要做到这一点,只需使用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
,但实际上并非必要。
您可能想要查看substr()方法以提取前6个字符,或者如果要在原地进行比较,则可以使用compare()方法。 – Steve
'std :: strncmp'是一个选项 – vu1p3n0x
“*或甚至更好,只是评估第一个单词*” - 从字符串创建一个std :: istreamstream',使用'operator >>'提取第一个单词它碰巧是)到一个'std :: string'中,然后使用'operator =='根据需要测试它的值 –