比较 C 中的字符
Comparing characters in C
我有一个关于在函数内部比较 C 中字符串的单个字符的问题。
代码如下所示:
int fq(char *s1){
int i;
for(i=0;i<strlen(s1);i++){
if(s1[i]=="?"){
printf("yes");
}
}
return 1;
}
即使 s1="???"它永远不会打印出是的。我已经设法解决了这个问题,但我很好奇为什么它以一种方式工作而不是另一种方式。
这是一段有效的代码:
int fq(char *s1,char *s2){
int i;
char q[]="?";
for(i=0;i<strlen(s1);i++){
if(s1[i]==q[0]){
printf("yes");
}
}
return 1;
}
因为第一个样本比较的是地址而不是字符。
c 中没有字符串类型,==
运算符应用于数组或指针时,比较地址而不是内容。
你的函数应该这样写才对
int fq(char *s1,char *s2)
{
int i;
for (i = 0 ; s1[i] ; ++i)
{
if (s1[i] == 'q')
printf("yes");
}
return 1;
}
您可以将 s1[i]
与 'q'
进行比较。
"?"
不是 char
而是一个只有一个 char
的字符串
'?'
是一个字符,在 s1[i] == '?'
中应该 return 为真
if(s1[i]=="?"){
不是检查 s1[i]
是否为字符 '?'
的正确语法。必须是:
if(s1[i] == '?'){
您可能想研究如何更改编译器设置,以便在代码库中存在此类表达式时收到警告。
将选项 -Wall
与 gcc
一起使用,我收到以下消息:
cc -Wall soc.c -o soc
soc.c: In function ‘fq’:
soc.c:7:15: warning: comparison between pointer and integer
if(s1[i]=="?"){
^
soc.c:7:15: warning: comparison with string literal results in unspecified behavior [-Waddress]
在 C 字符数组中,即字符串的语法为“”。对于单个字符,语法为 ''。
在你的情况下:应该是:if(s1[i]=='?')
如果你想以字符串形式比较它,你需要 strcmp。因为 '==' 运算符无法在 C 中比较字符串。
要比较两个字符串,我们可以使用:if(!strcmp(s1,q))
对于此操作,您需要添加 string.h header,例如:#include <string.h>
要使用“==”运算符比较字符串,您需要重载该运算符。但是,C 不支持运算符重载。为此,您可以使用 C++ 语言。
我有一个关于在函数内部比较 C 中字符串的单个字符的问题。 代码如下所示:
int fq(char *s1){
int i;
for(i=0;i<strlen(s1);i++){
if(s1[i]=="?"){
printf("yes");
}
}
return 1;
}
即使 s1="???"它永远不会打印出是的。我已经设法解决了这个问题,但我很好奇为什么它以一种方式工作而不是另一种方式。 这是一段有效的代码:
int fq(char *s1,char *s2){
int i;
char q[]="?";
for(i=0;i<strlen(s1);i++){
if(s1[i]==q[0]){
printf("yes");
}
}
return 1;
}
因为第一个样本比较的是地址而不是字符。
c 中没有字符串类型,==
运算符应用于数组或指针时,比较地址而不是内容。
你的函数应该这样写才对
int fq(char *s1,char *s2)
{
int i;
for (i = 0 ; s1[i] ; ++i)
{
if (s1[i] == 'q')
printf("yes");
}
return 1;
}
您可以将 s1[i]
与 'q'
进行比较。
"?"
不是 char
而是一个只有一个 char
'?'
是一个字符,在 s1[i] == '?'
if(s1[i]=="?"){
不是检查 s1[i]
是否为字符 '?'
的正确语法。必须是:
if(s1[i] == '?'){
您可能想研究如何更改编译器设置,以便在代码库中存在此类表达式时收到警告。
将选项 -Wall
与 gcc
一起使用,我收到以下消息:
cc -Wall soc.c -o soc
soc.c: In function ‘fq’:
soc.c:7:15: warning: comparison between pointer and integer
if(s1[i]=="?"){
^
soc.c:7:15: warning: comparison with string literal results in unspecified behavior [-Waddress]
在 C 字符数组中,即字符串的语法为“”。对于单个字符,语法为 ''。
在你的情况下:应该是:if(s1[i]=='?')
如果你想以字符串形式比较它,你需要 strcmp。因为 '==' 运算符无法在 C 中比较字符串。
要比较两个字符串,我们可以使用:if(!strcmp(s1,q))
对于此操作,您需要添加 string.h header,例如:#include <string.h>
要使用“==”运算符比较字符串,您需要重载该运算符。但是,C 不支持运算符重载。为此,您可以使用 C++ 语言。