NYJYA 发表于 2019-2-5 17:49:11

看看我的代码是有哪些不足?谢谢各位了

6-1 统计字符串出现次数
题目描述
从键盘输入两个字符串,输出第二个串在第一个串中出现的次数。如果没有,输出“No”。

输入描述
输入两个字符串

输出描述
输出第二个串在第一个串中出现的次数。
如果没有,输出 No
#include <stdio.h>

int main()
{
    char S,T,*p1,*p2;
        int i=0,j=0,num=0;
        char ch1,ch2;
    ch1=getchar();
        while(ch1!='\n')
        {   
                S=ch1;   
                i++;   
                ch1=getchar();
                  }   

        ch2=getchar();   
        while(ch2!='\n')
        {   
                T=ch2;
                j++;   
                ch2=getchar();
        }   
        p1=&S;p2=&T;
        while(p1<=&S+i&&p2<=&T+j)
        {   
             if(*p1==*p2)
        {
                p1++;   
                        p2++;   
        }   
        else   
        {      
          p1=p1+1;   
                p2=&T;
    }      
        if(p2==&T+j)   
        {      
                num++;   
        }
        }
        if(p1==&S+i+1&&num!=0)
        {
                printf("%d\n",num);
        }
        else printf("No");
        return 0;
}

ba21 发表于 2019-2-5 18:27:38

第一,取字符不用这么麻烦,gets即可。
第二 比效太啰嗦。

如果是我,我会这么写,直接用数组就完成了:
#include <stdio.h>

int main()
{
    char S,T;
        int i, j, count;

        printf("请输入字符串1:");
        gets(S);

        printf("请输入字符串2:");
        gets(T);   


        count = 0;
        for(i=0; S!='\0'; i++)
        {
                for(j=0; T!='\0'; j++)
                {
                        if (S != T) // i+j 表示每次从数组S的下1个元素比
                        {
                                break;
                        }
                }

                if(T == '\0') // 说明有相等的字符串
                {
                        count++;
                }
        }

        printf("%d\n", count);


        return 0;
}

ba21 发表于 2019-2-5 18:30:13

页: [1]
查看完整版本: 看看我的代码是有哪些不足?谢谢各位了