C语言中在字符串中查找指定字符串拜托各位大神

求一段C代码 要求: 字符串str1="nayitianzhi daoanzd" str2="anz" str2在str1中查找出现的地址(要求查找str1中所有出现的位置,而不是找到一处就返回),要求全字匹配,不是查找到单个字符匹配就返回. 参数类似于C函数strpbrk, 请高手帮帮忙,谢谢,尽量加上注释,新手学习中

int str_cmp(int n,char*a,char *b) {int i; for(i=0;i<n;i++) if(a[i]!=b[i]) return 0; return 1; } void f(int n,char *a,char *b) {int i,j; for(i=n;i<strlen(a);i++) {char m[100]; for(j=0;j<=i;j++) m[j]=a[j]; m[j]=0; strcat(m,b); if(str_cmp(strlen(m),a,m)) {puts(m); printf("%d\n",i+strlen(b)+1); f(m-a+1,a,b); } } } main() {char * str1="nayitianzhi daoanzd";//定义两个字符串,并有两个字符型指针指向 char * str2="anz"; f(0,str1,str2); system("pause");} 追问: 无法运行啊! 能写全了吗 把文件头都加上 C里运行 回答: #include<stdio.h> #include<stdlib.h> #include<string.h> int str_cmp(int n,char*a,char *b) {int i; for(i=0;i<n;i++) if(a[i]!=b[i]) return 0; return 1; } void f(int n,char *a,char *b) {int i,j; for(i=n;i<strlen(a);i++) {char m[100]; for(j=0;j<=i;j++) m[j]=a[j]; m[j]=0; strcat(m,b); if(str_cmp(strlen(m),a,m)) {puts(m); printf("%d\n",i+strlen(b)+1); f(m-a+1,a,b); } } } int main() {char * str1="nayitianzhi daoanzd";//定义两个字符串,并有两个字符型指针指向 char * str2="anz"; f(0,str1,str2); system("pause"); return 0; } 追问: 谢谢哥们 麻烦您能用指针的方式解决这题吗 不通过访问下标的形式 能加上注释吗 新手学习 麻烦您了 分不是问题
温馨提示:答案为网友推荐,仅供参考
第1个回答  2015-05-13
#include"stdio.h" #include"string.h" void main() { char *str1="nayitianzhi daoanzd"; char *str2="anz"; int index[20]; int num = 0; int i,j; for (i = 0; i < strlen(str1) - 3; i++) for (j = 0; j < 3; j++) { if (*(str1 + i) == *(str2 + j)) //比较 { i ++; //str1移到下一位 if (j == 2) //如果比较了三次都相等则找到一个 { index[num] = i - 2; //记录str1下标 num ++; } } else { i = i - j; //有不相等的跳出,i回到比较前的值 break; } } printf("共找到:%d个\n",num); printf("下标分别是:"); for (i = 0; i < num; i++) { printf("\t%d",index[i]); } getchar(); }本回答被提问者采纳
相似回答