如何检查const char *是否以特定字符串开头? (C ++)

时间:2014-10-15 08:39:15

标签: c++ string char const

我有一个const char *变量,我想检查它是否以某个字符串开头。

例如:

string sentence = "Hello, world!";
string other = "Hello";
const char* c = sentence.c_str();

if(/*"c" begins with "other"*/)
{
    //Do something
}

如何使用if语句执行此操作?

3 个答案:

答案 0 :(得分:4)

要检查C字符串是否以某个子字符串开头,您可以使用strncmp()

对于C ++字符串,有一个std::string::compare()重载接受偏移量和长度。

答案 1 :(得分:3)

你可以使用c函数strstr(string1, string2),它返回指向string1中第一个出现的string2的指针。如果返回的指针是string1,则string1以您想要匹配的内容开头。

const char* str1 = "Hello World";
const char* ptr = strstr(str1, "Hello");
// -----
if(str1 == ptr)
  puts("Found");

请记住,你的其他变量需要在strstr函数的上下文中使用它的.c_str()方法。

答案 2 :(得分:0)

有几个选项可供考虑,一个使用传统C调用,另外两个更具C ++特性。

如果您确实拥有const char *,那么最好使用旧版C,但是,因为您的示例代码只会创建一个const char * std::string,我提供了其他解决方案,因为您似乎只使用字符串作为 true 数据源。

在C ++中,您可以使用string::comparestring::find,尽管compare可能更有效率,因为它只检查字符串的开头而不是检查所有地方和将返回值与零进行比较(find似乎更简洁,因此,如果您重视并且速度不是最重要的,则可以使用它代替):

if (haystack.compare(0, needle.length(), needle) == 0)
if (haystack.find(needle) == 0)

使用旧版C的东西,你可以这样做:

if (strncmp (haystack.c_str(), needle.c_str(), needle.length()) == 0)

请参阅以下完整程序以获取示例:

#include <iostream>
#include <string>
#include <cstring>

int main (void) {
    std::string haystack = "xyzzy";
    std::string needle = "xy";
    std::string other = "99";

    if (haystack.compare(0, needle.length(), needle) == 0)
        std::cout << "xy found\n";
    else
        std::cout << "xy not found\n";

    if (haystack.compare(0, other.length(), other) == 0)
        std::cout << "xx found\n";
    else
        std::cout << "xx not found\n";

    return 0;
}

对于其他选项,只需更改上面显示的if语句即可匹配给定的样本。