我有一个char数组,如果需要我可以转换为字符串。
字符串可以是一整句长,但我只关心字符串的前6个字符,因为它们是我程序的命令操作(添加/删除/删除等)。
我想知道,我该怎么做呢?检查前几个字符,或者甚至更好地只评估char或string数组中的第一个单词。
答案 0 :(得分:0)
例如,你想要比较s1 == s2(0,10),这意味着字符串 s2 的前十个字符,使用 substr()可能有效通过,像这样:
s1 == s2.substr(0, 10);
其中, s2.substr(pos,n)表示连续的 n 字符以字符串<的 pos-th 位置开头EM> S2 。
另一个功能也是使用:
s1.compare(pos1, n1, s2);
menas:将 n1 字符从字符串s1的pos1位置开始比较到字符串2.您可以检查此功能及其超载的其他五个功能。
答案 1 :(得分: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
但实际上并不是必需的。