我的.c程序在创建对象时为其提供“名称”。我需要能够根据该名称执行不同的任务。我对此非常陌生并尝试了几种方法但没有成功。这就是我想出的......
if (name == "james"){
//Do a bunch of stuff
}
if (name == "tom"){
//Do a bunch of stuff
}
这不成功。有没有办法,如果'名字'是一件事,它不会执行其他人?
非常感谢你的帮助
答案 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;
}