繁体   English   中英

给定一个字符串,如何检查前几个字符是否 == 另一个字符串? C++

[英]Given a string, how to check if the first few characters == another string? c++

我有一个字符数组,如果需要,我可以将其转换为字符串。

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

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

例如,您要比较 s1 == s2(0, 10),这意味着字符串s2的前十个字符,使用substr()可以解决它,如下所示:

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

其中, s2.substr(pos, n)表示从字符串s2的第 pos 个位置开始的连续n 个字符。

另一个功能也可以使用:

s1.compare(pos1, n1, s2);

menas:比较从字符串 s1 的 pos1 位置开始的n1 个字符到字符串 2。您可以查看此函数及其重载的其他五个函数。

要就地执行此操作,只需使用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但实际上并不是必需的。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM