c语言问题,求网友们解答一下

任意输入一串字符串(字符串长度不超50),统计出在这个
字符串中有多少个U,P,R,E(分别统计大小写),并统
计出有多少个连续的大写的UPRE

定义U P R E u p r e 8个变量,循环字符串统计

统计连续的大写UPRE 循环用strstr()查找子串即可你题目的解答代码如下:

#include <stdio.h>
#include <string.h>
int main(){
    char s[51];
    int U=0, P=0, R=0, E=0, u=0, p=0, r=0, e=0, UPRE=0,i,len ;
    gets(s);
    len = strlen(s);
    char *c = s;
    while ((c=strstr(c,"UPRE")))
    {
        UPRE++;
        c=c+4;
    }
    for (i = 0; i < len; i++)
    {
        if (s[i]=='U')
            U++;
        if (s[i]=='P')
            P++;
        if (s[i]=='R')
            R++;
        if (s[i]=='E')
            E++;
        if (s[i]=='u')
            u++;
        if (s[i]=='p')
            p++;
        if (s[i]=='r')
            r++;
        if (s[i]=='e')
            e++;
    }

    printf("U=%d\n", U);
    printf("P=%d\n", P);
    printf("R=%d\n", R);
    printf("E=%d\n", E);
    printf("u=%d\n", u);
    printf("p=%d\n", p);
    printf("r=%d\n", r);
    printf("e=%d\n", e);
    printf("UPRE=%d\n", UPRE);
    return 0;
}

如有帮助,请点击我的回答下方的【采纳该答案】按钮帮忙采纳下,谢谢!

img

循环变量逐个比较字符。

#include <stdio.h>
int main()
{
    char s[51] = {0},UPRE[5] = "UPRE";
    gets(s);
    int U=0,P=0,R=0,E=0;
    int u=0,p=0,r=0,e=0;
    int UPREs = 0;
    int i=0,j=0;
    while(s[i] != '\0')
    {
        switch(s[i])
        {
        case 'U':
            {
                U++;
                j=1;
                while(j<4 && s[i+j] != '\0')
                {
                    if(s[i+j] != UPRE[j])
                        break;
                    j++;    
                }
                if(j==4)
                    UPREs++;
            }
            break;
        case 'u':
            u++;
            break;
        case 'P':
            P++;
            break;
        case 'p':
            p++;
            break;
        case 'R':
            R++;
            break;
        case 'r':
            r++;
            break;
        case 'E':
            E++;
            break;
        case 'e':
            e++;
            break;
        }
        i++;
    }

    printf("U=%d,P=%d,R=%d,E=%d\n",U,P,R,E);
    printf("u=%d,p=%d,r=%d,e=%d\n",u,p,r,e);
    printf("UPRE=%d\n",UPREs);
}

大小写字母分别统计,并统计UPRE连续出现的次数,遍历比较即可。
运行结果:

img

代码如下:

#include <stdio.h>
int main()
{
    char buf[52];
    char target[]={"UPRE"};
    int i,j;
    int nmbBu=0,nmbBp=0,nmbBr=0,nmbBe=0; //各个大写字母出现的次数
    int nmbSu=0,nmbSp=0,nmbSr=0,nmbSe=0; //各个小写字母出现的次数
    int nmbLx = 0; //连续的大写UPRE个数
    gets(buf); //读取字符串
    for (i=0;buf[i]!='\0';i++)
    {
        if(buf[i]=='u') nmbSu++;
        else if(buf[i]=='U') nmbBu++;
        else if(buf[i] == 'p') nmbSp++;
        else if(buf[i]=='P') nmbBp++;
        else if(buf[i] =='r') nmbSr++;
        else if(buf[i] =='R') nmbBr++;
        else if(buf[i] == 'e') nmbSe++;
        else if(buf[i] == 'E') nmbBe++;

        //查找连续的UPRE
        for(j=0;j<4;j++)
        {
            if( buf[i+j]=='\0' || buf[i+j] != target[j])
                break;
        }
        if(j==4)
            nmbLx++;

    }
    printf("u:%d\n",nmbSu);
    printf("U:%d\n",nmbBu);
    printf("p:%d\n",nmbSp);
    printf("P:%d\n",nmbBp);
    printf("r:%d\n",nmbSr);
    printf("R:%d\n",nmbBr);
    printf("e:%d\n",nmbSe);
    printf("E:%d\n",nmbBe);
    printf("UPRE:%d\n",nmbLx);
    return 0;
}

我推荐你了解一下正则校验,然后用正则校验去搜索统计,效率更高

您好,我是有问必答小助手,您的问题已经有小伙伴帮您解答,感谢您对有问必答的支持与关注!
PS:问答VIP年卡 【限时加赠:IT技术图书免费领】,了解详情>>> https://vip.csdn.net/askvip?utm_source=1146287632