在没有字符串库的情况下测试字符串相等性
testing for string-equality without the string library
我编写了代码,我想查看两个 char* 'strings' 是否相等。我在代码里写了打印语句来帮我调试。
基本上,命令数组是:[a, b, null]
用户输入的 cmd 可以是任何内容,但如果它是 a、b 或 null,那么我们要进入 if 语句。
for (i = 0; i < 3; i++){
printf("cmd.name = : %s\nCommand = %s\n", cmd->name, commands[i]);
if (cmd->name == commands[i]){
printf("inside if\n");
valid = 1;
}
}
正在打印:
cmd.name = : a
Command = a
cmd.name = : a
Command = b
cmd.name = : a
Command = (null)
所以在第一个实例中 a 应该等于 a 对吗?为什么它不进入 if 语句?
char* 表示指向字符串第一个字符的指针,因此通过测试 cmd->name == commands[i] 可以测试 name 是否与 commands[i] 具有相同的地址。要比较两个字符串,您可以使用标准库 (string.h) 的 strcmp 函数,如果函数 return 0 您的两个字符串相等。
编辑:如果您不能使用字符串库,请编写一个简单的循环。在你的循环中,如果你发现两个字符串之间的字符不同,你 return 一个错误的值(例如 0),如果你可以在你的字符串末尾找到不同的字符,那么你 return真值(示例 1)
由于不能使用字符串库,所以需要自己实现strcmp函数。
char*作为一种类型,只是一个指针,即它存储的是一个地址。然后简单的'=='将比较地址,这不是你想要的。
一个简单的 strcmp 函数可以是:
int myStrcmp(const char *str1, int size1, const char *str2, int size2)
{
int i = 0;
if(size1 != size2)
return -1 //different strings
for(i = 0; i < size1; i++)
{
if(str1[i] != str2[i])
return -1; //different strings
}
return 0; //same strings
}
这里的技巧是您必须以某种方式知道字符串的大小。如果你不能使用字符串库,我想你也不能使用 strlen()。
我编写了代码,我想查看两个 char* 'strings' 是否相等。我在代码里写了打印语句来帮我调试。
基本上,命令数组是:[a, b, null]
用户输入的 cmd 可以是任何内容,但如果它是 a、b 或 null,那么我们要进入 if 语句。
for (i = 0; i < 3; i++){
printf("cmd.name = : %s\nCommand = %s\n", cmd->name, commands[i]);
if (cmd->name == commands[i]){
printf("inside if\n");
valid = 1;
}
}
正在打印:
cmd.name = : a
Command = a
cmd.name = : a
Command = b
cmd.name = : a
Command = (null)
所以在第一个实例中 a 应该等于 a 对吗?为什么它不进入 if 语句?
char* 表示指向字符串第一个字符的指针,因此通过测试 cmd->name == commands[i] 可以测试 name 是否与 commands[i] 具有相同的地址。要比较两个字符串,您可以使用标准库 (string.h) 的 strcmp 函数,如果函数 return 0 您的两个字符串相等。
编辑:如果您不能使用字符串库,请编写一个简单的循环。在你的循环中,如果你发现两个字符串之间的字符不同,你 return 一个错误的值(例如 0),如果你可以在你的字符串末尾找到不同的字符,那么你 return真值(示例 1)
由于不能使用字符串库,所以需要自己实现strcmp函数。
char*作为一种类型,只是一个指针,即它存储的是一个地址。然后简单的'=='将比较地址,这不是你想要的。
一个简单的 strcmp 函数可以是:
int myStrcmp(const char *str1, int size1, const char *str2, int size2)
{
int i = 0;
if(size1 != size2)
return -1 //different strings
for(i = 0; i < size1; i++)
{
if(str1[i] != str2[i])
return -1; //different strings
}
return 0; //same strings
}
这里的技巧是您必须以某种方式知道字符串的大小。如果你不能使用字符串库,我想你也不能使用 strlen()。