编写一个函数,该函数可以统计一个长度为2的字符串在另一个字符串中出现的次数。例如,假定输入的字符串为:asd asasdfg asd as zx67 asd mklo,子字符串为:as,则应输出6。 注意:部分源程序在文件PROGl.C中。 请勿改

admin2013-04-02  29

问题 编写一个函数,该函数可以统计一个长度为2的字符串在另一个字符串中出现的次数。例如,假定输入的字符串为:asd asasdfg asd as zx67 asd mklo,子字符串为:as,则应输出6。
  注意:部分源程序在文件PROGl.C中。
  请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入你编写的若干语句。
#include
#include
int fun(char *str,char *substr)
{
}
NONO()
{
/* 请在此函数内打开文件,输入测试数据,调用 fun 函数,输出数据,关闭文件。 */
  char str[81],substr[3], ch;
  int n,len, i = 0;
  FILE *rf, *wf ;
  rf = fopen("in.dat","r");
  wf = fopen("out.dat","w");
  while(i < 5) {
    fgets(str, 80, rf);
    fgets(substr, 10, rf);
    len = strlen(substr) - 1 ;
    ch = substr[len] ;
    if(ch == ’\n’ || ch == 0x1a) substr[len] = 0 ;
    n=fun(str,substr);
    fprintf(wf, "%d\n", n);
    i++ ;
  }
  fclose(rf);
  fclose(wf);
}
main()
{
  char str[81],substr[3];
  int n;
  printf("输入主字符串: ");
  gets(str);
  printf("输入子字符串: ");
  gets(substr);
  puts(str);
  puts(substr);
  n=fun(str,substr);
  printf("n=%d\n",n);
  NONO();
}

选项

答案{ int cnt=0; char *p=str, *q; while(*p){ q=strstr(p, substr); if(q==NULL) break; p=q+strlen(substr); cnt++; } return cnt; }

解析 (1)在fun函数中,str接受主函数中的字符数组的首地址,另一个字符形参指针指向子串字符数组substr的首地址。
(2)利用strstr函数找到substr出现的位置,设置两个指针变量p和q分别记录起始地址和substr出现的地址。
(3)每次循环开始,使指针p指向str字符串首地址,使q指向子串substr出现的地址,p的位置不断往后移,直到字符串尾,每次找到substr对应统计加1。
转载请注明原文地址:https://kaotiyun.com/show/zJJp777K
0

最新回复(0)