如何检查变量是否包含字符串

时间:2012-04-20 10:08:56

标签: c string

我的.c程序在创建对象时为其提供“名称”。我需要能够根据该名称执行不同的任务。我对此非常陌生并尝试了几种方法但没有成功。这就是我想出的......

if (name ==  "james"){

    //Do a bunch of stuff
    } 
if (name ==  "tom"){

    //Do a bunch of stuff
    } 

这不成功。有没有办法,如果'名字'是一件事,它不会执行其他人?

非常感谢你的帮助

5 个答案:

答案 0 :(得分:3)

如果' name'是一个C ++字符串,你写的应该工作正常。如果它是char[]char *,请使用strcmp

答案 1 :(得分:2)

查看库函数strcmp。当你使用==时,你只会比较指针本身,而不是它们后面的实际字符串数组。

答案 2 :(得分:1)

您需要将strcmp用作:

if (!strcmp(name,"james")){

使用==将name的内容(字符串的起始地址)与字符串文字“james”的起始地址进行比较,这当然是你想要的。

答案 3 :(得分:1)

假设这是一个标准的.c程序,并且您的“名称”实际上是char*,那么您将不得不使用strings.h标准c库来strcmp() 1}}功能。

等于运算符==用于std::string和其他字符串类。

e.g。

if (strcmp(name,"james")==0){
  /* Do stuff */
}

此外,您可能会考虑多个测试的switch条件。

答案 4 :(得分:1)

C中,字符串被定义为以\0结尾的字符序列。字符串常量通常在`“中表示,例如,char a [10] =”hello“。

为了比较两个字符串,您可以使用strcmp()中提供的string.h等库函数。请man strcmp阅读有关此功能的更多信息。

#include <stdio.h>
#include <string.h>

int main()
{
        char name[] = "tom";

        if (strcmp(name, "tom") == 0) {
            printf("name is tom! \n");
        } else if (strcmp(name, "bob") == 0) {
            printf("name is bob! \n");
        } else {
            printf("who is this?! \n");
        }

        return 0;
}

strcmp可以通过以下方式实现(数组和指针版本供您参考)

int strcmp1(char a[], char b[])
{
        int i=0;
        while (a[i] == b[i]) {
                if (a[i] == '\0')
                        return 0;
                i++;
        }

        return a[i]-b[i];
}

int strcmp2(char *a, char *b)
{
        while (*a == *b) {
                if (*a == '\0')
                        return 0;
                a++; b++;
        }
        return *a-*b;
}