我的 .c 程序在创建对象时给它一个“名称”。我需要能够根据该名称执行不同的任务。我对此很陌生,并且尝试了几种方法都没有成功。这是我想出的..
if (name == "james"){
//Do a bunch of stuff
}
if (name == "tom"){
//Do a bunch of stuff
}
这并不成功。有没有办法让如果“名字”是一件事,它不会执行其他的?
非常感谢您的帮助
如果 'name' 是 C++ 字符串,那么您编写的内容应该可以正常工作。如果是char[]
or char *
,请使用strcmp
.
看看库函数strcmp
。当您使用时,==
您将只比较指针本身,而不是它们后面的实际字符串数组。
您需要strcmp
用作:
if (!strcmp(name,"james")){
使用==
将 name 的内容(字符串的起始地址)与字符串文字“james”的起始地址进行比较,这肯定是您现在想要的。
假设这是一个标准的 .c 程序,并且您的“名称”实际上是 a,char*
那么您将不得不使用该函数的strings.h标准 c 库strcmp()
。
相等运算符==
用于std::string
和其他字符串类。
例如
if (strcmp(name,"james")==0){
/* Do stuff */
}
此外,您可能会考虑switch
多个测试的条件。
在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;
}