0

我的 .c 程序在创建对象时给它一个“名称”。我需要能够根据该名称执行不同的任务。我对此很陌生,并且尝试了几种方法都没有成功。这是我想出的..

if (name ==  "james"){

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

    //Do a bunch of stuff
    } 

这并不成功。有没有办法让如果“名字”是一件事,它不会执行其他的?

非常感谢您的帮助

4

5 回答 5

3

如果 'name' 是 C++ 字符串,那么您编写的内容应该可以正常工作。如果是char[]or char *,请使用strcmp.

于 2012-04-20T10:12:21.233 回答
2

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

于 2012-04-20T10:11:11.123 回答
1

您需要strcmp用作:

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

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

于 2012-04-20T10:11:33.550 回答
1

假设这是一个标准的 .c 程序,并且您的“名称”实际上是 a,char*那么您将不得不使用该函数的strings.h标准 c 库strcmp()

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

例如

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

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

于 2012-04-20T10:19:07.777 回答
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;
}
于 2012-04-20T10:20:48.947 回答