24.5.16 1.改写strcmp strcat。2.统计字符个数(创建新数组)。3.字符串倒置(创建新数组)。4.删除字符串中的空格。5.附加题(不创建新数组完成3题和4题)。

1.改写strcmp strcat。

①改写strcmp

#include <stdio.h>
#include <string.h>
int main(int argc, const char *argv[])
{
    char c[100] ="12345" ;
    char c1[100] = "12";
    int value = 0;
    /*    实现strcmp(c,c1)   */
    for(int i=0;i<100;i++)
    {
        if(c[i] != c1[i])
        {
            value = c[i] - c1[i];
            break;
        }
        if(c[i]=='\0' ||c1[i] == '\0' )//减少循环次数
        {
            value = c[i] - c1[i];
            break;                                            

        }
    }
    printf("%d\n",value);
    value = strcmp(c,c1);
    printf("%d\n",value);
    return 0;
}
                                                              

运行结果

②改写strcat

#include <stdio.h>
#include <string.h>
int main(int argc, const char *argv[])
{
    /*实现strcat(c,c1)功能*/
    char c[100] = "abc";
    char c1[100] = "123";
    int a = -1;
    for(int i=0;i<100;i++)
    {
        if(c[i] == '\0')
            if (c1[++a] != '\0')
                c[i] = c1[a];
            else
                break;
    }
    printf("%s\n",c);
    return 0;
}                                                

运行结果

2.从终端获取一个字符串,判断该字符串中有几个小写字母,大写字母,数字字符

#include <stdio.h>
int main(int argc, const char *argv[])
{
    char c[100] = "",temp;
    int count_Big = 0,count_small = 0,count_num = 0;
    printf("请输入一串字符我来为你统计大写字母,小写字母以及数字符个数(enter输入结束):\n");
    for(int i=0;;i++)
    {

        temp = getchar();
        if(temp == '\n')//不接收换行符
        {
            printf("输入结束\n");
            break;
        }
        c[i] = temp;
    }                                                                         
    for(int i=0;c[i]!='\0';i++)
    {
        if(c[i]>='A' && c[i]<='Z')
            count_Big++;
        else if(c[i]>='a' && c[i]<='z')
            count_small++;
        else if(c[i]>='0' && c[i]<='9')
            count_num++;
    }
    printf("有%d个大写字母\n",count_Big);
    printf("有%d个小写字母\n",count_small);
    printf("有%d个数字\n",count_num);
    return 0;
}

运行结果

3.从终端获取一个字符串,要求将该字符串倒置存储(创建一个新数组)

#include <stdio.h>
int main(int argc, const char *argv[])
{
    char c[100] = "",new_c[100] = "",temp;
    int i = 0,j,len;
    printf("请输入一串字符我来为你倒置输出(enter输入结束):\n");
    for(i;;i++)
    {

        temp = getchar();
        if(temp == '\n')//不接收换行符
        {
            printf("输入结束\n");
            break;
        }
        c[i] = temp;
    }
    /*输入完成后,i的值就是输入字符的个数*/
    len = i;
    for(j=0;j<i;j++)
    {
        new_c[j] = c[--len];
    }
    printf("%s倒置后:\n%s\n",c,new_c);
    return 0;                                                               
}

运行结果

4.从终端获取一个字符串,要求删除字符串中的所有空格。(创建一个新数组)

 #include <stdio.h>
 int main(int argc, const char *argv[])
 {
     char c[100] = "",new_c[100] = "",temp;
     int i = 0,j = -1;
     printf("请输入一串字符我来为你删除所有空格(enter输入结束):\n");
     for(int i=0;;i++)
     {
         temp = getchar();
         if(temp == '\n')//不接收换行符
         {
             printf("输入结束\n");
             break;
         }
         c[i] = temp;
     }
     for(i=0;c[++j]!='\0';)
     {
         if(c[j]!=' ')
         {                                                                    
             new_c[i] = c[j];
             i++;
         }
     }
     printf("已为你删除所有空格:\n%s\n",new_c);
     return 0;
 }

代码结果

5.附加题:
①从终端获取一个字符串,要求在不新建新的数组的情况下,
将该字符串倒置存储。

#include <stdio.h>
int main(int argc, const char *argv[])
{
    char c[100] = "",temp;
     int i = 0,j = 1,len;
     printf("请输入一串字符我会将他们倒置输出(enter输入结束):\n");
     for(i;;i++)
     {
         temp = getchar();
         if(temp == '\n')//不接收换行符
         {
             printf("输入结束\n");
             break;
         }
         c[i] = temp;
     }                                                                       
     /*输入完成后,i的值就是输入字符的个数*/
     len = i-1;
     i = 0;
     for(;;)
     {
         if(i >= len)
             break;
         temp = c[i],c[i] = c[len],c[len] = temp;//值交换
         i++;
         len--;
     }
     printf("倒置后:%s\n",c);
    return 0;
}
                                                                             

运行结果


②从终端获取一个字符串,要求在不新建新的数组的情况下,
删除字符串中的所有空格。

 #include <stdio.h>
 int main(int argc, const char *argv[])
 {
     char c[100] = "",temp;
     int i = 0,len;
     printf("请输入一串字符我来为你删除所有空格(enter输入结束):\n");
     for(i;;i++)
     {
         temp = getchar();
         if(temp == '\n')//不接收换行符
         {
             printf("输入结束\n");
             break;
         }
         c[i] = temp;
     }
     len = 0;
     for(i=0;c[i]!='\0';i++)
     {
         if(c[i] != ' ')
         {
             c[len++] = c[i];//len下标会停在空格位置,等i下标赋非空格值给他后,len下标+1
         }        //空格越少,i和len就越近,如果没有空格,i就等于len
                 //i下标负责遍历数组,并把非空格字符赋值给len下标的位置
     }
     c[len] = '\0';
     printf("%s\n",c);
}                                                                                             

运行结果

  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值