一楼,你显然误解了楼主的意思。并非简单的查找一个字符串的前几个字符与另一个字符串是否相同。我想,楼主的意思应该是这样的。
例如一个字符指针数组 char *p[]={"abc","def","kst"}和char s[]="def"。可以将字符指针数组简单看成字符串数组,然后查找其中是否存在一个字符串s。
请看下面程序,可以直接复制运行,绝对是楼主想要的答案!
int scmp(char*a,char*b)/*比较两个字符串,功能与系统的比较函数稍不同*/
{
while(*a!='\0')
{
if(*a==*b&&*b!='\0')
{
a++;
b++;
}
else
break;
}
if(*a=='\0'&&*b=='\0')
return 1;
else
return 0;
}
int strcs(char*p[],char*s)/*将二维字符数组中的字符串逐个与目标比较*/
{
int i=0,j=0;
for(i=0;i<=2;i++)
{
j=scmp(p[i],s);
if(j==1)
break;
}
return j;
}
main()
{
char *str1[]={"ab","defk","tsg"};
char *str2="tsg";
printf("%d",strcs(str1,str2));
getch();
}
最后,不得不坦诚的说下我的遗憾。我们知道,如果以字符串作为数组中的元素的话,这个数组可以简单的看着二维字符数组。对于这样的数组,我们是无法找到可以判断其结束的标志的,正如整型数组一样。所以对于您的问题,必须在主函数中先确定数组个数。
/*s 被查找的字符串
accept 目标字符串
*/
int strspn(const char *s, const char *accept)
{
const char *p;
const char *a;
int count;
for (p = s; *p != '\0'; ++p) {
for (a = accept; *a != '\0'; ++a) {
if (*p == *a)
break;
}
if (*a == '\0'){
count=0;
return count;
}
count=1;
}
return count;
}
int main(void)
{
char a[]="abddefg";
char b[]="abcd";
int i;
i=strspn(b,a);
printf("%d",i);
}
二楼 你看得懂我函数中循环的意思吗,
只是查找前几个字符与另一个字符串是否相同?
你读代码的能力有待提高啊。
从你的代码可以看出,你对C指针的理解实在太浅显。
这么简单的问题更本不需要2维数组。
建议你学着写写库文件中string.c中的函数。