当前位置:   article > 正文

C语言总结:C语言字符串练习题(十二种习题示例)_c语言字符串处理例题

c语言字符串处理例题

本期分享C语言字符串练习题,字符串在存储上类似字符数组,今天就和大家一起学习一下字符串所涉及的一下操作练习。

C语言字符串全方位练习,涉及知识点:字符串解析、大小写判断、字符串插入、字符串删除、字符串排序、字符串转整数、字符串转浮点数、时间转换、GPS数据解析等等。

原文作者:51CTO丨DS小龙哥,链接:https://blog.51cto.com/u_11822586/5273575

1. 计算空格、大小写字母

从键盘上输入一个字符串, 计算字符串里有多少个空格、小写字母、大写字母、数字。

  1. #include <stdio.h> //标准输入输出
  2. #include <string.h> //字符串处理头文件
  3. int main(int argc,char **argv)
  4. {
  5. int len=0;
  6. int i;
  7. char str[100];
  8. int cnt[5]={0}; //初始化赋值
  9. //scanf("%s",str); //从键盘上录入字符串,字符串结尾: '\0'
  10. //gets(str); //从键盘上录入字符串
  11. fgets(str,100,stdin); //从键盘上录入字符串 (标准输入)
  12. //空格、小写字母、大写字母、数字 其他数据
  13. /*1. 计算字符串的长度*/
  14. while(str[len]!='\0')len++;
  15. printf("len1=%d\n",len);
  16. printf("len2=%d\n",strlen(str)); //计算字符串长度
  17. /*2. 处理字符串*/
  18. for(i=0;i<len;i++)
  19. {
  20. if(str[i]==' ')cnt[0]++;
  21. else if(str[i]>='a'&&str[i]<='z')cnt[1]++;
  22. else if(str[i]>='A'&&str[i]<='Z')cnt[2]++;
  23. else if(str[i]>='0'&&str[i]<='9')cnt[3]++;
  24. else cnt[4]++;
  25. }
  26. /*3. 打印结果*/
  27. printf("空格:%d\n",cnt[0]);
  28. printf("小写:%d\n",cnt[1]);
  29. printf("大写:%d\n",cnt[2]);
  30. printf("数字:%d\n",cnt[3]);
  31. printf("其他:%d\n",cnt[4]);
  32. return 0;
  33. }

2. 字符串排序

  1. 示例:
  2. #include <stdio.h> //标准输入输出
  3. #include <string.h> //字符串处理头文件
  4. int main(int argc,char **argv)
  5. {
  6. int len=0;
  7. int i,j;
  8. char tmp;
  9. char str[100];
  10. fgets(str,100,stdin); //从键盘上录入字符串 (标准输入)
  11. /*1. 计算字符串的长度*/
  12. len=strlen(str); //计算字符串长度
  13. /*2. 字符串排序*/
  14. for(i=0;i<len-1;i++)
  15. {
  16. for(j=0;j<len-1-i;j++)
  17. {
  18. if(str[j]<str[j+1])
  19. {
  20. tmp=str[j];
  21. str[j]=str[j+1];
  22. str[j+1]=tmp;
  23. }
  24. }
  25. }
  26. /*3. 打印结果*/
  27. printf("%s\n",str); //打印字符串(标准输出)
  28. puts(str); //打印字符串(标准输出)
  29. fputs(str,stdout); //打印字符串(标准输出)
  30. return 0;
  31. }

3. 字符串插入

字符串插入: “1234567890”

在第2个位置后面插入”ABC”

最终结果: “12ABC34567890”

  1. #include <stdio.h> //标准输入输出
  2. #include <string.h> //字符串处理头文件
  3. int main(int argc,char **argv)
  4. {
  5. int i,j;
  6. int src_len;
  7. int new_len;
  8. /*
  9. 123456789
  10. 12 3456789
  11. */
  12. char src_str[100]="123456789";
  13. char new_str[]="abcd";
  14. int addr=2; //插入的位置
  15. /*1. 计算字符串的长度*/
  16. src_len=strlen(src_str); //"123"
  17. new_len=strlen(new_str);
  18. /*2. 字符串移动*/
  19. for(i=src_len-1;i>addr-1;i--)
  20. {
  21. src_str[i+new_len]=src_str[i]; //向后移动 new_len
  22. }
  23. /*3. 插入新的数据*/
  24. for(i=0;i<new_len;i++)src_str[addr+i]=new_str[i];
  25. /*4. 打印字符串*/
  26. src_str[src_len+new_len]='\0'; //在字符串结尾添加'\0'
  27. printf("src_str=%s\n",src_str);
  28. return 0;
  29. }

4. 字符串查找

字符串查找: “123456123abc123hbc”

查找字符串”123”的数量。数量是3

  1. #include <stdio.h> //标准输入输出
  2. #include <string.h> //字符串处理头文件
  3. int main(int argc,char **argv)
  4. {
  5. char src_str[100];
  6. char find_str[10];
  7. int src_len=0,find_len=0;
  8. int i,j;
  9. int cnt=0;
  10. /*1. 录入字符串*/
  11. printf("输入源字符串:"); //123dufvdfv123dfljvb
  12. fgets(src_str,100,stdin); //从键盘上录入源字符串
  13. //scanf("%s",src_str);
  14. printf("输入查找的字符串:"); //123
  15. fgets(find_str,10,stdin); //从键盘上录入源字符串
  16. //scanf("%s",find_str);
  17. /*2. 计算长度*/
  18. src_len=strlen(src_str);
  19. src_str[src_len-1]='\0';
  20. src_len-=1; //src_len=src_len-1;
  21. find_len=strlen(find_str); //"123\n" =4
  22. find_str[find_len-1]='\0';
  23. find_len-=1;
  24. printf("源字符串:%s,%d\n",src_str,src_len);
  25. printf("查找的字符串:%s,%d\n",find_str,find_len);
  26. /*3. 查找字符串*/
  27. for(i=0;i<src_len-find_len+1;i++)
  28. {
  29. for(j=0;j<find_len;j++)
  30. {
  31. //只有一次不相等就退出 //123kdfvfd 123
  32. if(src_str[i+j]!=find_str[j])break;
  33. }
  34. if(j==find_len) //条件成立表示查找成功
  35. {
  36. cnt++;
  37. i+=find_len-1;//向后移动
  38. }
  39. }
  40. /*4. 打印查找结果*/
  41. printf("cnt=%d\n",cnt);
  42. return 0;
  43. }

5. 字符串删除

字符串删除: “1234567890”

删除”456” 最终结果: “1237890”

  1. 示例:
  2. #include <stdio.h> //标准输入输出
  3. #include <string.h> //字符串处理头文件
  4. int main(int argc,char **argv)
  5. {
  6. char src_str[100];
  7. char del_str[10];
  8. int src_len=0,del_len=0;
  9. int i,j;
  10. int cnt=0;
  11. /*1. 录入字符串*/
  12. printf("输入源字符串:"); //123dufvdfv123dfljvb
  13. fgets(src_str,100,stdin); //从键盘上录入源字符串
  14. printf("输入查找的字符串:"); //123
  15. fgets(del_str,10,stdin); //从键盘上录入源字符串
  16. /*2. 计算长度*/
  17. src_len=strlen(src_str);
  18. src_str[src_len-1]='\0';
  19. src_len-=1; //src_len=src_len-1;
  20. del_len=strlen(del_str); //"123\n" =4
  21. del_str[del_len-1]='\0';
  22. del_len-=1;
  23. printf("源字符串:%s,%d\n",src_str,src_len);
  24. printf("删除字符串:%s,%d\n",del_str,del_len);
  25. /*3. 查找*/
  26. for(i=0;i<src_len-del_len+1;i++)
  27. {
  28. for(j=0;j<del_len;j++)
  29. {
  30. if(src_str[i+j]!=del_str[j])break;
  31. }
  32. if(j==del_len)
  33. {
  34. cnt++;
  35. /*4.删除*/
  36. for(j=i;j<src_len-del_len;j++)
  37. {
  38. src_str[j]=src_str[j+del_len];
  39. }
  40. src_len-=del_len;
  41. i-=1; //继续在当前位置查找
  42. }
  43. }
  44. src_str[src_len]='\0';
  45. printf("src_str=%s\n",src_str);
  46. printf("cnt=%d\n",cnt);
  47. return 0;
  48. }

6. 字符串替换

7. 字符串转整数

从键盘上输入一个字符串”12345”, 得到整数: 12345;

  1. #include <stdio.h> //标准输入输出
  2. #include <string.h> //字符串处理头文件
  3. int string_to_int(char str[]);
  4. int main(int argc,char **argv)
  5. {
  6. int data;
  7. char str[]="125abcd";
  8. data=string_to_int(str);
  9. printf("data=%d\n",data);
  10. return 0;
  11. }
  12. /*
  13. 函数功能: 字符串转为整数
  14. 字符转为整数: -48 或者 -'0'
  15. 1234
  16. */
  17. int string_to_int(char str[])
  18. {
  19. int value=0; //存放转换之后的结果
  20. int i=0;
  21. while((str[i]!='\0')&&(str[i]>='0'&&str[i]<='9'))
  22. {
  23. value*=10;
  24. value+=str[i]-'0';
  25. i++;
  26. }
  27. return value;
  28. }

8. 整数转字符串

整数转字符串。输入一个整数1234,得到字符串: “1234”

  1. 1234%10=4 1234/10=123 123%10=3 123/10=12
  2. 示例:
  3. #include <stdio.h> //标准输入输出
  4. #include <string.h> //字符串处理头文件
  5. void int_to_string(char str[],int data);
  6. int main(int argc,char **argv)
  7. {
  8. char str[100];
  9. int_to_string(str,12345);
  10. printf("str=%s\n",str);
  11. return 0;
  12. }
  13. /*
  14. 函数功能: 整数转为字符串
  15. 函数参数:
  16. char str[] //存放转换之后的整数(字符串)
  17. int data //待转换的整数
  18. */
  19. void int_to_string(char str[],int data)
  20. {
  21. int i=0,j;
  22. char tmp;
  23. /*1. 将整数转为字符串*/
  24. while(data)
  25. {
  26. str[i]=data%10+'0';
  27. data/=10;
  28. i++;
  29. }
  30. str[i]='\0';
  31. /*2. 交换顺序*/
  32. for(j=0;j<i/2;j++)
  33. {
  34. tmp=str[j];
  35. str[j]=str[i-j-1];
  36. str[i-j-1]=tmp;
  37. }
  38. }

9. 浮点数转字符串

浮点数转字符串。输入一个浮点数123.456 得到字符串"123.456"

  1. 示例:
  2. #include <stdio.h> //标准输入输出
  3. #include <string.h> //字符串处理头文件
  4. void float_to_string(char str[],float data);
  5. int main(int argc,char **argv)
  6. {
  7. char str[100];
  8. float_to_string(str,12345.123);
  9. printf("str=%s\n",str);
  10. return 0;
  11. }
  12. /*
  13. 函数功能: 浮点数转为字符串
  14. 函数参数:
  15. char str[] //存放转换之后的 浮点数(字符串)
  16. int data //待转换的 浮点数
  17. */
  18. void float_to_string(char str[],float data)
  19. {
  20. int i=0,j;
  21. char tmp;
  22. int addr;
  23. int int_data=data; //得到整数 12345
  24. int float_data=(data-int_data)*1000000;// 0.123456 *1000000 =123456
  25. /*1. 将整数部分转为字符串*/
  26. while(int_data)
  27. {
  28. str[i]=int_data%10+'0';
  29. int_data/=10;
  30. i++;
  31. }
  32. str[i]='.'; //添加小数点
  33. /*2. 交换顺序: 整数*/
  34. for(j=0;j<i/2;j++)
  35. {
  36. tmp=str[j];
  37. str[j]=str[i-j-1];
  38. str[i-j-1]=tmp;
  39. }
  40. /*3. 将浮点数部分转为字符串*/
  41. i++; //跨过小数点
  42. addr=i;
  43. while(float_data)
  44. {
  45. str[i]=float_data%10+'0';
  46. float_data/=10;
  47. i++;
  48. }
  49. str[i]='\0';
  50. /*4. 交换顺序: 小数部分*/
  51. for(j=0;j<3;j++)
  52. {
  53. tmp=str[addr+j];
  54. str[addr+j]=str[i-j-1];
  55. str[i-j-1]=tmp;
  56. }
  57. }

10.字符串转浮点数

字符串转浮点数。输入一个字符串: “123.456” 得到浮点数类型: 123.456

  1. #include <stdio.h> //标准输入输出
  2. #include <string.h> //字符串处理头文件
  3. float string_to_float(char str[]);
  4. int main(int argc,char **argv)
  5. {
  6. float data;
  7. char str[]="123.456";
  8. data=string_to_float(str);
  9. printf("data=%f\n",data);
  10. return 0;
  11. }
  12. /*
  13. 函数功能: 字符串转为浮点数
  14. 字符转为整数: -48 或者 -'0'
  15. */
  16. float string_to_float(char str[])
  17. {
  18. int int_value=0; //存放转换之后的结果
  19. int float_value=0;
  20. int i=0;
  21. float data;
  22. int cnt=0; //记录小数部分的数量
  23. int tmp=1;
  24. /*1. 整数部分*/
  25. while((str[i]!='\0')&&(str[i]>='0'&&str[i]<='9'))
  26. {
  27. int_value*=10;
  28. int_value+=str[i]-'0';
  29. i++;
  30. }
  31. /*2. 浮点数部分*/
  32. i++; //跨过小数点
  33. while((str[i]!='\0')&&(str[i]>='0'&&str[i]<='9'))
  34. {
  35. float_value*=10;
  36. float_value+=str[i]-'0';
  37. i++;
  38. cnt++;
  39. }
  40. for(i=0;i<cnt;i++)tmp*=10;
  41. data=int_value; //整数部分
  42. data+=float_value/(tmp*1.0);
  43. return data;
  44. }

11. 时间转换

时间转换(秒与标准时间的转换)。

在代码里加入: #include <time.h> 头文件。‘

调用time_t time(time_t *t);函数获取本地时间。

示例: unsigned int sec=time(NULL); //sec是获取到的秒单位时间

该时间是从1970年开始计算的。

什么是标准时间? 得到年-月-日 时:分:秒

本身: 数字电子钟。

RTC: 实时时钟。

  1. #include <time.h>
  2. time_t time(time_t *t);
  3. Linux下日期修改:
  4. [root@wbyq code]# date -s "2018-12-24 21:09:20"
  5. 示例:
  6. #include <stdio.h> //标准输入输出
  7. #include <string.h> //字符串处理头文件
  8. #include <time.h>
  9. int get_year(int year);
  10. void sec_to_time(int sec);
  11. void Get_Week(int sec);
  12. //定义时间结构
  13. int tm_sec; /* seconds */
  14. int tm_min; /* minutes */
  15. int tm_hour; /* hours */
  16. int tm_mday; /* day of the month */
  17. int tm_mon; /* month */
  18. int tm_year; /* year */
  19. int tm_wday; /* day of the week */
  20. int tm_yday; /* day in the year */
  21. int mon_p[12]={31,28,31,30,31,30,31,31,30,31,30,31};
  22. int mon_r[12]={31,29,31,30,31,30,31,31,30,31,30,31};
  23. int main(int argc,char **argv)
  24. {
  25. int sec1;
  26. int sec2;
  27. while(1)
  28. {
  29. sec1=time(NULL);//获取当前计算机系统的秒单位时间
  30. if(sec1!=sec2)
  31. {
  32. sec2=sec1;
  33. sec_to_time(sec2+8*60*60);
  34. printf("%d-%d-%d %d:%d:%d\n",
  35. tm_year,
  36. tm_mon,
  37. tm_mday,
  38. tm_hour,
  39. tm_min,
  40. tm_sec
  41. );
  42. printf("当前时间是当前年的第%d天\n",tm_yday);
  43. }
  44. }
  45. return 0;
  46. }
  47. /*
  48. 函数功能: 秒转标准时间
  49. */
  50. void sec_to_time(int sec)
  51. {
  52. int i;
  53. Get_Week(sec);
  54. /*1. 得到年份*/
  55. tm_year=1970;//基础年份
  56. while(sec>=365*24*60*60)
  57. {
  58. if(get_year(tm_year)) //闰年
  59. {
  60. if(sec>=366*24*60*60)
  61. {
  62. sec-=366*24*60*60; //减去一年
  63. tm_year++; //增加一年
  64. }
  65. else break;
  66. }
  67. else //平年
  68. {
  69. sec-=365*24*60*60; //减去一年
  70. tm_year++; //增加一年
  71. }
  72. }
  73. /*计算当前时间是一年中的第几天*/
  74. tm_yday=sec/(24*60*60);
  75. /*2. 得到月份*/
  76. tm_mon=1;
  77. for(i=0;i<12;i++)
  78. {
  79. if(get_year(tm_year)) //闰年
  80. {
  81. if(sec>=mon_r[i]*24*60*60)
  82. {
  83. sec-=mon_r[i]*24*60*60;
  84. tm_mon++;
  85. }
  86. else break;
  87. }
  88. else //平年
  89. {
  90. if(sec>=mon_p[i]*24*60*60)
  91. {
  92. sec-=mon_p[i]*24*60*60;
  93. tm_mon++;
  94. }
  95. else break;
  96. }
  97. }
  98. /*3. 天数*/
  99. tm_mday=1;
  100. while(sec>=24*60*60)
  101. {
  102. tm_mday++;
  103. sec-=24*60*60;
  104. }
  105. /*4. 小时*/
  106. tm_hour=0;
  107. while(sec>=60*60)
  108. {
  109. tm_hour++;
  110. sec-=60*60;
  111. }
  112. /*5. 分钟*/
  113. tm_min=0;
  114. while(sec>=60)
  115. {
  116. tm_min++;
  117. sec-=60;
  118. }
  119. /*6. 秒*/
  120. tm_sec=sec;
  121. }
  122. /*
  123. 函数功能: 获取年份状态: 平年和闰年
  124. 函数参数: year填年份
  125. 返回值: 0表示平年 1表示闰年
  126. */
  127. int get_year(int year)
  128. {
  129. if((year%400==0)||(year%4==0&&year%100!=0))
  130. {
  131. return 1;
  132. }
  133. return 0;
  134. }
  135. /*
  136. 函数功能: 获取星期
  137. */
  138. void Get_Week(int sec)
  139. {
  140. int day=sec/(24*60*60);
  141. switch(day%7)
  142. {
  143. case 0:
  144. printf("星期4\n");
  145. break;
  146. case 1:
  147. printf("星期5\n");
  148. break;
  149. case 2:
  150. printf("星期6\n");
  151. break;
  152. case 3:
  153. printf("星期日\n");
  154. break;
  155. case 4:
  156. printf("星期1\n");
  157. break;
  158. case 5:
  159. printf("星期2\n");
  160. break;
  161. case 6:
  162. printf("星期3\n");
  163. break;
  164. }
  165. }

12. GPS数据解析

  1. 提取最基本的数据:
  2. (1) UTC时间
  3. (2) 海拔高度
  4. (3) 经纬度
  5. //GPS返回的数据格式如下
  6. char gps_data[]=
  7. {
  8. "$GNGGA,114955.000,2842.4158,N,11549.5439,E,1,05,3.8,54.8,M,0.0,M,,*4F \
  9. $GNGLL,2842.4158,N,11549.5439,E,114955.000,A,A*4D \
  10. $GPGSA,A,3,10,31,18,,,,,,,,,,5.7,3.8,4.2*37 \
  11. $BDGSA,A,3,07,10,,,,,,,,,,,5.7,3.8,4.2*2A \
  12. $GPGSV,3,1,10,10,49,184,42,12,16,039,,14,54,341,,18,22,165,23*7B \
  13. $GPGSV,3,2,10,22,11,318,,25,51,055,,26,24,205,,29,13,110,*7C \
  14. $GPGSV,3,3,10,31,50,287,36,32,66,018,*7F \
  15. $BDGSV,1,1,04,03,,,07,05,,,29,07,79,246,33,10,52,232,19*62 \
  16. $GNRMC,114955.000,A,2842.4158,N,11549.5439,E,0.00,44.25,061117,,,A*4D \
  17. $GNVTG,44.25,T,,M,0.00,N,0.00,K,A*14 \
  18. $GNZDA,114955.000,06,11,2017,00,00*47 \
  19. $GPTXT,01,01,01,ANTENNA OK*35"
  20. };

-----------------------------------

写在最后:另外,对于准备学习C/C++编程的小伙伴,如果你想更好的提升你的编程核心能力(内功)不妨从现在开始!

C语言C++编程学习交流圈子,QQ群:946108597点击进入】微信公众号:C语言编程学习基地

整理分享(多年学习的源码、项目实战视频、项目笔记,基础入门教程)

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/数据流舞者/article/detail/62752?site
推荐阅读
相关标签
  

闽ICP备14008679号