热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

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

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

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

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

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

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

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

#include //标准输入输出
#include //字符串处理头文件
int main(int argc,char **argv)
{int len&#61;0;int i;char str[100];int cnt[5]&#61;{0}; //初始化赋值//scanf("%s",str); //从键盘上录入字符串,字符串结尾: &#39;\0&#39;//gets(str); //从键盘上录入字符串fgets(str,100,stdin); //从键盘上录入字符串 (标准输入)//空格、小写字母、大写字母、数字 其他数据/*1. 计算字符串的长度*/while(str[len]!&#61;&#39;\0&#39;)len&#43;&#43;;printf("len1&#61;%d\n",len);printf("len2&#61;%d\n",strlen(str)); //计算字符串长度/*2. 处理字符串*/for(i&#61;0;i&#61;&#39;a&#39;&&str[i]<&#61;&#39;z&#39;)cnt[1]&#43;&#43;;else if(str[i]>&#61;&#39;A&#39;&&str[i]<&#61;&#39;Z&#39;)cnt[2]&#43;&#43;;else if(str[i]>&#61;&#39;0&#39;&&str[i]<&#61;&#39;9&#39;)cnt[3]&#43;&#43;;else cnt[4]&#43;&#43;;}/*3. 打印结果*/printf("空格:%d\n",cnt[0]);printf("小写:%d\n",cnt[1]);printf("大写:%d\n",cnt[2]);printf("数字:%d\n",cnt[3]);printf("其他:%d\n",cnt[4]);return 0;
}

2. 字符串排序

示例:
#include //标准输入输出
#include //字符串处理头文件int main(int argc,char **argv)
{int len&#61;0;int i,j;char tmp;char str[100];fgets(str,100,stdin); //从键盘上录入字符串 (标准输入)/*1. 计算字符串的长度*/len&#61;strlen(str); //计算字符串长度/*2. 字符串排序*/for(i&#61;0;i}

3. 字符串插入

字符串插入: “1234567890”

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

最终结果: “12ABC34567890”

#include //标准输入输出
#include //字符串处理头文件
int main(int argc,char **argv)
{int i,j;int src_len;int new_len;/*12345678912 3456789*/char src_str[100]&#61;"123456789"; char new_str[]&#61;"abcd";int addr&#61;2; //插入的位置/*1. 计算字符串的长度*/src_len&#61;strlen(src_str); //"123"new_len&#61;strlen(new_str);/*2. 字符串移动*/for(i&#61;src_len-1;i>addr-1;i--){src_str[i&#43;new_len]&#61;src_str[i]; //向后移动 new_len}/*3. 插入新的数据*/for(i&#61;0;i}

4. 字符串查找

字符串查找: “123456123abc123hbc”

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

#include //标准输入输出
#include //字符串处理头文件int main(int argc,char **argv)
{char src_str[100];char find_str[10];int src_len&#61;0,find_len&#61;0;int i,j;int cnt&#61;0;/*1. 录入字符串*/printf("输入源字符串:"); //123dufvdfv123dfljvbfgets(src_str,100,stdin); //从键盘上录入源字符串//scanf("%s",src_str);printf("输入查找的字符串:"); //123fgets(find_str,10,stdin); //从键盘上录入源字符串//scanf("%s",find_str);/*2. 计算长度*/src_len&#61;strlen(src_str);src_str[src_len-1]&#61;&#39;\0&#39;;src_len-&#61;1; //src_len&#61;src_len-1;find_len&#61;strlen(find_str); //"123\n" &#61;4find_str[find_len-1]&#61;&#39;\0&#39;;find_len-&#61;1;printf("源字符串:%s,%d\n",src_str,src_len);printf("查找的字符串:%s,%d\n",find_str,find_len);/*3. 查找字符串*/for(i&#61;0;i}

5. 字符串删除

字符串删除: “1234567890”

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

示例:
#include //标准输入输出
#include //字符串处理头文件int main(int argc,char **argv)
{char src_str[100];char del_str[10];int src_len&#61;0,del_len&#61;0;int i,j;int cnt&#61;0;/*1. 录入字符串*/printf("输入源字符串:"); //123dufvdfv123dfljvbfgets(src_str,100,stdin); //从键盘上录入源字符串printf("输入查找的字符串:"); //123fgets(del_str,10,stdin); //从键盘上录入源字符串/*2. 计算长度*/src_len&#61;strlen(src_str);src_str[src_len-1]&#61;&#39;\0&#39;;src_len-&#61;1; //src_len&#61;src_len-1;del_len&#61;strlen(del_str); //"123\n" &#61;4del_str[del_len-1]&#61;&#39;\0&#39;;del_len-&#61;1;printf("源字符串:%s,%d\n",src_str,src_len);printf("删除字符串:%s,%d\n",del_str,del_len);/*3. 查找*/for(i&#61;0;i}

6. 字符串替换


7. 字符串转整数

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

#include //标准输入输出
#include //字符串处理头文件
int string_to_int(char str[]);
int main(int argc,char **argv)
{int data;char str[]&#61;"125abcd";data&#61;string_to_int(str);printf("data&#61;%d\n",data);return 0;
}/*
函数功能: 字符串转为整数
字符转为整数: -48 或者 -&#39;0&#39;1234
*/
int string_to_int(char str[])
{int value&#61;0; //存放转换之后的结果int i&#61;0;while((str[i]!&#61;&#39;\0&#39;)&&(str[i]>&#61;&#39;0&#39;&&str[i]<&#61;&#39;9&#39;)){value*&#61;10;value&#43;&#61;str[i]-&#39;0&#39;;i&#43;&#43;;} return value;
}

8. 整数转字符串

整数转字符串。输入一个整数1234&#xff0c;得到字符串: “1234”

1234%10&#61;4 1234/10&#61;123 123%10&#61;3 123/10&#61;12
示例:
#include //标准输入输出
#include //字符串处理头文件
void int_to_string(char str[],int data);int main(int argc,char **argv)
{char str[100];int_to_string(str,12345);printf("str&#61;%s\n",str);return 0;
}/*
函数功能: 整数转为字符串
函数参数:char str[] //存放转换之后的整数(字符串)int data //待转换的整数
*/
void int_to_string(char str[],int data)
{int i&#61;0,j;char tmp;/*1. 将整数转为字符串*/while(data){str[i]&#61;data%10&#43;&#39;0&#39;;data/&#61;10;i&#43;&#43;;}str[i]&#61;&#39;\0&#39;;/*2. 交换顺序*/for(j&#61;0;j}

9. 浮点数转字符串

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

示例:
#include //标准输入输出
#include //字符串处理头文件
void float_to_string(char str[],float data);int main(int argc,char **argv)
{char str[100];float_to_string(str,12345.123);printf("str&#61;%s\n",str);return 0;
}/*
函数功能: 浮点数转为字符串
函数参数:char str[] //存放转换之后的 浮点数(字符串)int data //待转换的 浮点数
*/
void float_to_string(char str[],float data)
{int i&#61;0,j;char tmp;int addr;int int_data&#61;data; //得到整数 12345int float_data&#61;(data-int_data)*1000000;// 0.123456 *1000000 &#61;123456/*1. 将整数部分转为字符串*/while(int_data){str[i]&#61;int_data%10&#43;&#39;0&#39;;int_data/&#61;10;i&#43;&#43;;}str[i]&#61;&#39;.&#39;; //添加小数点/*2. 交换顺序: 整数*/for(j&#61;0;j}

10.字符串转浮点数

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

#include //标准输入输出
#include //字符串处理头文件
float string_to_float(char str[]);
int main(int argc,char **argv)
{float data;char str[]&#61;"123.456";data&#61;string_to_float(str);printf("data&#61;%f\n",data);return 0;
}/*
函数功能: 字符串转为浮点数
字符转为整数: -48 或者 -&#39;0&#39;
*/
float string_to_float(char str[])
{int int_value&#61;0; //存放转换之后的结果int float_value&#61;0; int i&#61;0;float data;int cnt&#61;0; //记录小数部分的数量int tmp&#61;1;/*1. 整数部分*/while((str[i]!&#61;&#39;\0&#39;)&&(str[i]>&#61;&#39;0&#39;&&str[i]<&#61;&#39;9&#39;)){int_value*&#61;10;int_value&#43;&#61;str[i]-&#39;0&#39;;i&#43;&#43;;}/*2. 浮点数部分*/i&#43;&#43;; //跨过小数点while((str[i]!&#61;&#39;\0&#39;)&&(str[i]>&#61;&#39;0&#39;&&str[i]<&#61;&#39;9&#39;)){float_value*&#61;10;float_value&#43;&#61;str[i]-&#39;0&#39;;i&#43;&#43;;cnt&#43;&#43;;}for(i&#61;0;i}

11. 时间转换

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

在代码里加入: #include 头文件。‘

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

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

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

什么是标准时间&#xff1f; 得到年-月-日 时:分:秒

本身: 数字电子钟。

RTC: 实时时钟。

#include
time_t time(time_t *t);Linux下日期修改:
[root&#64;wbyq code]# date -s "2018-12-24 21:09:20"
示例:
#include //标准输入输出
#include //字符串处理头文件
#include int get_year(int year);
void sec_to_time(int sec);
void Get_Week(int sec);//定义时间结构
int tm_sec; /* seconds */
int tm_min; /* minutes */
int tm_hour; /* hours */
int tm_mday; /* day of the month */
int tm_mon; /* month */
int tm_year; /* year */
int tm_wday; /* day of the week */
int tm_yday; /* day in the year */int mon_p[12]&#61;{31,28,31,30,31,30,31,31,30,31,30,31};
int mon_r[12]&#61;{31,29,31,30,31,30,31,31,30,31,30,31};int main(int argc,char **argv)
{int sec1;int sec2;while(1){sec1&#61;time(NULL);//获取当前计算机系统的秒单位时间if(sec1!&#61;sec2){sec2&#61;sec1;sec_to_time(sec2&#43;8*60*60);printf("%d-%d-%d %d:%d:%d\n",tm_year,tm_mon,tm_mday,tm_hour,tm_min,tm_sec);printf("当前时间是当前年的第%d天\n",tm_yday);}}return 0;
}/*
函数功能: 秒转标准时间
*/
void sec_to_time(int sec)
{int i;Get_Week(sec);/*1. 得到年份*/tm_year&#61;1970;//基础年份while(sec>&#61;365*24*60*60){if(get_year(tm_year)) //闰年{if(sec>&#61;366*24*60*60){sec-&#61;366*24*60*60; //减去一年tm_year&#43;&#43;; //增加一年}else break;}else //平年{sec-&#61;365*24*60*60; //减去一年tm_year&#43;&#43;; //增加一年}}/*计算当前时间是一年中的第几天*/tm_yday&#61;sec/(24*60*60);/*2. 得到月份*/tm_mon&#61;1;for(i&#61;0;i<12;i&#43;&#43;){if(get_year(tm_year)) //闰年{if(sec>&#61;mon_r[i]*24*60*60){sec-&#61;mon_r[i]*24*60*60;tm_mon&#43;&#43;;}else break;}else //平年{if(sec>&#61;mon_p[i]*24*60*60){sec-&#61;mon_p[i]*24*60*60;tm_mon&#43;&#43;;}else break;}}/*3. 天数*/tm_mday&#61;1;while(sec>&#61;24*60*60){tm_mday&#43;&#43;;sec-&#61;24*60*60;}/*4. 小时*/tm_hour&#61;0;while(sec>&#61;60*60){tm_hour&#43;&#43;;sec-&#61;60*60;}/*5. 分钟*/tm_min&#61;0;while(sec>&#61;60){tm_min&#43;&#43;;sec-&#61;60;}/*6. 秒*/tm_sec&#61;sec;
}/*
函数功能: 获取年份状态: 平年和闰年
函数参数: year填年份
返回值: 0表示平年 1表示闰年
*/
int get_year(int year)
{if((year%400&#61;&#61;0)||(year%4&#61;&#61;0&&year%100!&#61;0)){return 1;}return 0;
}/*
函数功能: 获取星期
*/
void Get_Week(int sec)
{int day&#61;sec/(24*60*60);switch(day%7){case 0:printf("星期4\n"); break;case 1:printf("星期5\n"); break;case 2:printf("星期6\n"); break;case 3:printf("星期日\n"); break;case 4:printf("星期1\n"); break;case 5:printf("星期2\n"); break;case 6:printf("星期3\n"); break;}
}

12. GPS数据解析

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

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

写在最后&#xff1a;另外&#xff0c;对于准备学习C/C&#43;&#43;编程的小伙伴&#xff0c;如果你想更好的提升你的编程核心能力&#xff08;内功&#xff09;不妨从现在开始&#xff01;

C语言C&#43;&#43;编程学习交流圈子&#xff0c;QQ群&#xff1a;946108597点击进入】微信公众号&#xff1a;C语言编程学习基地

整理分享&#xff08;多年学习的源码、项目实战视频、项目笔记&#xff0c;基础入门教程&#xff09;


推荐阅读
author-avatar
爱你王明英
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有