鱼C论坛

 找回密码
 立即注册
查看: 501|回复: 1

[学习笔记] 每日一学3

[复制链接]
发表于 2024-11-26 14:21:20 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
本帖最后由 6bingame 于 2024-11-26 14:22 编辑

字符串和字符数组


自动分类字符应用
课堂练习
题1:任意输入一段字符串(不超过40个字符),将输入的字符串进行分类。数字字符分为一类,字母字符分为一类,其他字符分为一类。
例如:输入asdf123456QWE!@#$789TYU,输出效果如下:

数字字符:123456789
字母字符:asdfQWETYU
其它字符:!@#$

解:
  1. #include<stdio.h>
  2. int main()
  3. {
  4.     int i,m,e,o;

  5.     char input[40];

  6.     char math[40],English[40],others[40];

  7.     m=e=o=0;

  8.     printf("输入字符串\n");

  9.     gets(input);        //输入字符

  10.     for(i=0;input[i];i++)
  11.     {
  12.         if(input[i]>='0'&&input[i]<='9')

  13.             math[m++]=input[i];

  14.         else if((input[i]>='a'&&input[i]<='z')||(input[i]>='A'&&input[i]<='Z'))

  15.             English[e++]=input[i];

  16.         else others[o++]=input[i];
  17.     }
  18.     printf("整数字符:");        //输出整数字符

  19.     for(i=0;i<m;i++)

  20.         printf("%c",math[i]);

  21.     printf("\n");

  22.     printf("字母字符:");        //输出字母字符

  23.     for(i=0;i<e;i++)

  24.         printf("%c",English[i]);

  25.     printf("\n");

  26.     printf("其它字符:");        //输出其它字符

  27.     for(i=0;i<m;i++)

  28.         printf("%c",others[i]);

  29.     printf("\n");

  30.     return 0;
  31. }
复制代码



题2:连接两个字符串。

解:
  1. #include<stdio.h>
  2. int main()
  3. {
  4.     char a[]="ABCDEFG";

  5.     char b[]="123456";

  6.     char c[80];

  7.     int i=0,j=0,k=0;

  8.     while(a[i]!='\0'||b[j]!='\0')   //a和b不同时到结束
  9.     {
  10.         if(a[i]!='\0')  //a不到结束时
  11.         {
  12.     c[k]=a[i];

  13.     i++;
  14.         }
  15.         else    //b不到结束时

  16.             c[k]=b[j++];

  17.         k++;    //c数组元素下标
  18.     }
  19.     c[k]='\0';  //c数组最后一个元素,标志字符串结束

  20.     puts(c);

  21.     return 0;
  22. }
复制代码



题3:两个字符串复制程序。

解:
  1. #include<stdio.h>

  2. #define LSIZE 81

  3. void strcopy(char[],char[]);

  4. int main()
  5. {
  6.     char message[LSIZE];    //原数组

  7.     char newMessage[LSIZE]; //复制后的数组

  8.     printf("输入字符串:");

  9.     gets(message);

  10.     strcopy(newMessage,message);

  11.     puts(newMessage);

  12.     return 0;
  13. }
  14. //复制string2到string1
  15. void strcopy(char string1[],char string2[])
  16. {
  17.     int i=0;    //i是下标

  18.     while(string2[i]!='\0') //是否结束
  19.     {
  20.         string1[i]=string2[i];  //复制

  21.         i++;
  22.     }
  23.     string1[i]='\0';    //结束标志
  24. }
复制代码

评分

参与人数 1鱼币 +3 收起 理由
中英文泡椒 + 3 继续加油

查看全部评分

小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2024-11-26 14:28:15 | 显示全部楼层
  1. #include <stdio.h>
  2. #include <string.h>

  3. int main() {
  4.     char input[41]; // 用于存储输入的字符串,长度为40个字符加上一个结束符
  5.     char math[41] = ""; // 用于存储数字字符
  6.     char English[41] = ""; // 用于存储字母字符
  7.     char others[41] = ""; // 用于存储其他字符

  8.     int m = 0, e = 0, o = 0; // 分别用于记录数字、字母和其他字符的数量

  9.     printf("输入字符串
  10. ");
  11.     fgets(input, 41, stdin); // 使用fgets代替gets,避免缓冲区溢出

  12.     for (int i = 0; i < strlen(input); i++) {
  13.         if (input[i] >= '0' && input[i] <= '9') {
  14.             math[m++] = input[i];
  15.         } else if ((input[i] >= 'a' && input[i] <= 'z') || (input[i] >= 'A' && input[i] <= 'Z')) {
  16.             English[e++] = input[i];
  17.         } else {
  18.             others[o++] = input[i];
  19.         }
  20.     }

  21.     // 输出结果
  22.     printf("数字字符:%s
  23. ", math);
  24.     printf("字母字符:%s
  25. ", English);
  26.     printf("其它字符:%s
  27. ", others);

  28.     return 0;
  29. }
复制代码


以上代码实现了将输入的字符串分类为数字字符、字母字符和其他字符。请注意,使用`fgets`代替`gets`以避免缓冲区溢出的问题。

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-6-7 07:55

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表