【发布时间】:2021-11-17 01:22:51
【问题描述】:
我一直在寻找验证两个字符串是否相等的 C 代码。我找到了这个,但我不明白for 和while 部分的逻辑。
int verify(phonebook name[],char name_verify[])
{
int i,k;
char *p,temp[strlen(name_verify)];
if(strlen(name) >= strlen(name_verify))
{
for(i=0; i<=(strlen(name) - strlen(name_verify)) ; i++)
{
p=&name[i];
k=0;
while(k!=strlen(name_verify))
{
temp[k] =* (p + k);
k++;
}
temp[k]='\0';
if(strcmp(strupr(temp),strupr(name_verify))==0)
{
return 1;
}
}
}
有人可以向我解释一下它是如何工作的吗?
【问题讨论】:
-
代码检查字符串name_verify是否是字符串name的子字符串,与字母大小写无关。
-
你能解释一下为什么这段代码不好吗?
-
至少因为函数 strlen 被多次调用相同的字符串。还有一些未在使用它们的范围内声明的已使用变量。而且数组 temp 是多余的。
-
@VladfromMoscow 这部分是如何工作的
temp[k] =* (p + k);我没明白,因为 p 是一种 char 指针类型,它与整数类型求和。 -
同 temp[k] = p[k];其中指针 p 指向从索引 i 开始的字符串名称的子字符串。
标签: c substring c-strings function-definition