我写了一些代码来查找给定字符串在字符串数组中的位置。 问题是-它没有给出位置。它给了其他东西。
我理解问题可能与所涉及的指针之间的差异有关,以前的版本致力于查找单词中字母的位置,效果很好。 经过大量尝试找出错误所在后,我向您寻求帮助。 请告诉我应该怎么做。#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int what (char * token);
main()
{
int i=0;
char string[]="jsr";
char *token;
token=&string[0];
i=what(token);
printf(" location of input is %d \n", i);
return 0;
}
int what (char * token)
{
int i=1;
char *typtbl[]={"mov",
"cmp",
"add",
"sub",
"not",
"clr",
"lea",
};
char * ptr;
ptr=(char *)typtbl;
while (!(strcmp(ptr,token)==0))
{
ptr=(char *)(typtbl+i);
i++;
}
return i;
}
答案 0 :(得分:0)
如前所述,您没有正确设计功能what
。如果您的搜索功能遍历所有指针但未找到所需的字符串,它将返回什么值?通常,在那种情况下,返回-1
可以指示什么都找不到。同样在这种情况下,使用for
循环可能更合适,您可以立即返回索引,而不用遍历所有指针。
int what(char *token)
{
char *typtbl[] = {
"mov",
"cmp",
"add",
"sub",
"not",
"clr",
"lea",
};
for( size_t i = 0; i < sizeof(typtbl)/sizeof(char*); ++i )
{
char *ptr = typtbl[i];
if(strcmp(ptr, token) == 0)
{
return i; // found something
}
}
return -1; // found nothing
}
答案 1 :(得分:0)
更干净的工作版本。
主要问题是以下代码中的(char *)(typtbl+i)
替换为typtbl[i]
。 typtbl+i
等效于&typtbl[i]
,因此,如果我的记忆力不错,它是字符串指针的指针,而不是字符串本身的指针
我在数组末尾添加了一个NULL,以便在字符串不存在时可以停止,并返回-1以明确表示未找到。
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
int what(char *token);
int main()
{
int i = 0;
char string[] = "jsr";
i = what(string);
printf(" location of input is %d \n", i);
return 0;
}
int what(char *token)
{
char *typtbl[] = {
"mov",
"cmp",
"add",
"jsr",
"not",
"clr",
"lea",
NULL
};
int i = 0;
while(typtbl[i] && !(strcmp(typtbl[i], token) == 0)) {
++i;
}
if(!typtbl[i])
i = -1;
return i;
}
char *token; token=&string[0];
没用,因为string == &string[0]
。
答案 2 :(得分:0)
几件事:
这应该可以完成无指针算法的工作。
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int what (char * token);
int main(){
int i=0;
char string[]="jsr";
char *token;
token=&string[0];
i=what(token);
printf(" location of input is %d \n", i);
return 0;
}
int what (char * token){
unsigned int i=0;
char *typtbl[]={"mov",
"cmp",
"add",
"sub",
"not",
"clr",
"lea",
};
unsigned int typtbl_x_size = sizeof(typtbl)/sizeof(typtbl[0]);
char * ptr;
ptr=typtbl[i];
while (!(strcmp(ptr,token)==0)){
i += 1;
if (i >= typtbl_x_size){
printf("element not in list\n");
return -1;
}
ptr=typtbl[i];
}
return i;
}