栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > 资讯 > 高等教育 > 考研政策

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

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

本期分享C语言字符串练习题,字符串在存储上类似字符数组,今天就和大家一起学习一下字符串所涉及的一下操作练习。C语言字符串全方位练习,涉及知识点:字符串解析、大小写判断、字符串插入、字符串删除、字符串排序、字符串转整数、字符串转浮点数、时间转换、GPS数据解析等等。原文作者:51CTO丨DS小龙哥,链接:https://blog.51cto.com/u_11822586/5273575

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

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

#include <stdio.h>  //标准输入输出#include <string.h> //字符串处理头文件int main(int argc,char **argv){int len=0;int i;char str[100];int cnt[5]={0};  //初始化赋值//scanf("%s",str); //从键盘上录入字符串,字符串结尾: ''//gets(str);       //从键盘上录入字符串fgets(str,100,stdin); //从键盘上录入字符串 (标准输入)//空格、小写字母、大写字母、数字 其他数据while(str[len]!='')len++;printf("len1=%dn",len);printf("len2=%dn",strlen(str)); //计算字符串长度for(i=0;i<len;i++){if(str[i]==' ')cnt[0]++;else if(str[i]>='a'&&str[i]<='z')cnt[1]++;else if(str[i]>='A'&&str[i]<='Z')cnt[2]++;else if(str[i]>='0'&&str[i]<='9')cnt[3]++;else cnt[4]++;}printf("空格:%dn",cnt[0]);printf("小写:%dn",cnt[1]);printf("大写:%dn",cnt[2]);printf("数字:%dn",cnt[3]);printf("其他:%dn",cnt[4]);return 0;}
2. 字符串排序
示例:#include <stdio.h>  //标准输入输出#include <string.h> //字符串处理头文件int main(int argc,char **argv){int len=0;int i,j;char tmp;char str[100];fgets(str,100,stdin); //从键盘上录入字符串 (标准输入)len=strlen(str); //计算字符串长度for(i=0;i<len-1;i++){for(j=0;j<len-1-i;j++){if(str[j]<str[j+1]){tmp=str[j];str[j]=str[j+1];str[j+1]=tmp;}}}printf("%sn",str); //打印字符串(标准输出)puts(str);    //打印字符串(标准输出)fputs(str,stdout);  //打印字符串(标准输出)return 0;}
3. 字符串插入

字符串插入: “1234567890”在第2个位置后面插入”ABC”最终结果: “12ABC34567890”

#include <stdio.h>  //标准输入输出#include <string.h> //字符串处理头文件int main(int argc,char **argv){int i,j;int src_len;int new_len;char src_str[100]="123456789";  char new_str[]="abcd";int addr=2; //插入的位置src_len=strlen(src_str); //"123"new_len=strlen(new_str);for(i=src_len-1;i>addr-1;i--){src_str[i+new_len]=src_str[i]; //向后移动 new_len}for(i=0;i<new_len;i++)src_str[addr+i]=new_str[i];src_str[src_len+new_len]=''; //在字符串结尾添加''printf("src_str=%sn",src_str);return 0;}
4. 字符串查找

字符串查找: “123456123abc123hbc”查找字符串”123”的数量。数量是3

#include <stdio.h>  //标准输入输出#include <string.h> //字符串处理头文件int main(int argc,char **argv){char src_str[100];char find_str[10];int src_len=0,find_len=0;int i,j;int cnt=0;printf("输入源字符串:"); //123dufvdfv123dfljvbfgets(src_str,100,stdin); //从键盘上录入源字符串//scanf("%s",src_str);printf("输入查找的字符串:"); //123fgets(find_str,10,stdin); //从键盘上录入源字符串//scanf("%s",find_str);src_len=strlen(src_str);src_str[src_len-1]='';src_len-=1; //src_len=src_len-1;find_len=strlen(find_str); //"123n" =4find_str[find_len-1]='';find_len-=1;printf("源字符串:%s,%dn",src_str,src_len);printf("查找的字符串:%s,%dn",find_str,find_len);for(i=0;i<src_len-find_len+1;i++){for(j=0;j<find_len;j++){//只有一次不相等就退出 //123kdfvfd  123if(src_str[i+j]!=find_str[j])break;}if(j==find_len) //条件成立表示查找成功{cnt++;i+=find_len-1;//向后移动}}printf("cnt=%dn",cnt);return 0;}
5. 字符串删除

字符串删除: “1234567890”删除”456” 最终结果: “1237890”

示例:#include <stdio.h>  //标准输入输出#include <string.h> //字符串处理头文件int main(int argc,char **argv){char src_str[100];char del_str[10];int src_len=0,del_len=0;int i,j;int cnt=0;printf("输入源字符串:"); //123dufvdfv123dfljvbfgets(src_str,100,stdin); //从键盘上录入源字符串printf("输入查找的字符串:"); //123fgets(del_str,10,stdin); //从键盘上录入源字符串src_len=strlen(src_str);src_str[src_len-1]='';src_len-=1; //src_len=src_len-1;del_len=strlen(del_str); //"123n" =4del_str[del_len-1]='';del_len-=1;printf("源字符串:%s,%dn",src_str,src_len);printf("删除字符串:%s,%dn",del_str,del_len);for(i=0;i<src_len-del_len+1;i++){for(j=0;j<del_len;j++){if(src_str[i+j]!=del_str[j])break;}if(j==del_len){cnt++;for(j=i;j<src_len-del_len;j++){src_str[j]=src_str[j+del_len];}src_len-=del_len;i-=1; //继续在当前位置查找}}src_str[src_len]='';printf("src_str=%sn",src_str);printf("cnt=%dn",cnt);return 0;}
6. 字符串替换

7. 字符串转整数

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

#include <stdio.h>  //标准输入输出#include <string.h> //字符串处理头文件int string_to_int(char str[]);int main(int argc,char **argv){int data;char str[]="125abcd";data=string_to_int(str);printf("data=%dn",data);return 0;}int string_to_int(char str[]){int value=0; //存放转换之后的结果int i=0;while((str[i]!='')&&(str[i]>='0'&&str[i]<='9')){value*=10;value+=str[i]-'0';i++;}return value;}
8. 整数转字符串

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

1234%10=4  1234/10=123 123%10=3 123/10=12示例:#include <stdio.h>  //标准输入输出#include <string.h> //字符串处理头文件void int_to_string(char str[],int data);int main(int argc,char **argv){char str[100];int_to_string(str,12345);printf("str=%sn",str);return 0;}void int_to_string(char str[],int data){int i=0,j;char tmp;while(data){str[i]=data%10+'0';data/=10;i++;}str[i]='';for(j=0;j<i/2;j++){tmp=str[j];str[j]=str[i-j-1];str[i-j-1]=tmp;}}
9. 浮点数转字符串

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

示例:#include <stdio.h>  //标准输入输出#include <string.h> //字符串处理头文件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=%sn",str);return 0;}void float_to_string(char str[],float data){int i=0,j;char tmp;int addr;int int_data=data; //得到整数 12345int float_data=(data-int_data)*1000000;// 0.123456 *1000000 =123456while(int_data){str[i]=int_data%10+'0';int_data/=10;i++;}str[i]='.'; //添加小数点for(j=0;j<i/2;j++){tmp=str[j];str[j]=str[i-j-1];str[i-j-1]=tmp;}      i++; //跨过小数点   addr=i;   while(float_data)   {str[i]=float_data%10+'0';float_data/=10;i++;   }str[i]='';for(j=0;j<3;j++){tmp=str[addr+j];str[addr+j]=str[i-j-1];str[i-j-1]=tmp;}}
10.字符串转浮点数

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

#include <stdio.h>  //标准输入输出#include <string.h> //字符串处理头文件float string_to_float(char str[]);int main(int argc,char **argv){float data;char str[]="123.456";data=string_to_float(str);printf("data=%fn",data);return 0;}float string_to_float(char str[]){int int_value=0; //存放转换之后的结果int float_value=0; int i=0;float data;int cnt=0; //记录小数部分的数量int tmp=1;while((str[i]!='')&&(str[i]>='0'&&str[i]<='9')){int_value*=10;int_value+=str[i]-'0';i++;}i++; //跨过小数点while((str[i]!='')&&(str[i]>='0'&&str[i]<='9')){float_value*=10;float_value+=str[i]-'0';i++;cnt++;}for(i=0;i<cnt;i++)tmp*=10;data=int_value; //整数部分data+=float_value/(tmp*1.0);return data;}
11. 时间转换

时间转换(秒与标准时间的转换)。在代码里加入: #include <time.h> 头文件。‘调用time_t time(time_t *t);函数获取本地时间。示例: unsigned int sec=time(NULL); //sec是获取到的秒单位时间该时间是从1970年开始计算的。什么是标准时间? 得到年-月-日 时:分:秒本身: 数字电子钟。RTC: 实时时钟。

#include <time.h>time_t time(time_t *t);Linux下日期修改:  [root@wbyq code]# date -s "2018-12-24 21:09:20"示例:#include <stdio.h>  //标准输入输出#include <string.h> //字符串处理头文件#include <time.h>int get_year(int year);void sec_to_time(int sec);void Get_Week(int sec);//定义时间结构int tm_sec;         int tm_min;         int tm_hour;        int tm_mday;        int tm_mon;         int tm_year;        int tm_wday;        int tm_yday;        int mon_p[12]={31,28,31,30,31,30,31,31,30,31,30,31};int mon_r[12]={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=time(NULL);//获取当前计算机系统的秒单位时间if(sec1!=sec2){sec2=sec1;sec_to_time(sec2+8*60*60);printf("%d-%d-%d %d:%d:%dn",  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);tm_year=1970;//基础年份while(sec>=365*24*60*60){if(get_year(tm_year)) //闰年{if(sec>=366*24*60*60){sec-=366*24*60*60; //减去一年tm_year++; //增加一年}else break;}else //平年{sec-=365*24*60*60; //减去一年tm_year++; //增加一年}}tm_yday=sec/(24*60*60);tm_mon=1;for(i=0;i<12;i++){if(get_year(tm_year)) //闰年{if(sec>=mon_r[i]*24*60*60){sec-=mon_r[i]*24*60*60;tm_mon++;}else break;}else //平年{if(sec>=mon_p[i]*24*60*60){sec-=mon_p[i]*24*60*60;tm_mon++;}else break;}}tm_mday=1;while(sec>=24*60*60){tm_mday++;sec-=24*60*60;}tm_hour=0;while(sec>=60*60){tm_hour++;sec-=60*60;}tm_min=0;while(sec>=60){tm_min++;sec-=60;}tm_sec=sec;}int get_year(int year){if((year%400==0)||(year%4==0&&year%100!=0)){return 1;}return 0;}void Get_Week(int sec){int day=sec/(24*60*60);switch(day%7){case 0:printf("星期4n");    break;case 1:printf("星期5n");    break;case 2:printf("星期6n");    break;case 3:printf("星期日n");    break;case 4:printf("星期1n");    break;case 5:printf("星期2n");    break;case 6:printf("星期3n");    break;}}
12. GPS数据解析
提取最基本的数据:(1)UTC时间(2)海拔高度(3)经纬度//GPS返回的数据格式如下char gps_data[]={"$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"};

-----------------------------------写在最后:另外,对于准备学习C/C++编程的小伙伴,如果你想更好的提升你的编程核心能力(内功)不妨从现在开始!编程学习书籍分享:编程学习视频分享:整理分享(多年学习的源码、项目实战视频、项目笔记,基础入门教程)欢迎转行和学习编程的伙伴,利用更多的资料学习成长比自己琢磨更快哦!对于C/C++感兴趣可以关注小编在后台私信我:【编程交流】一起来学习哦!可以领取一些C/C++的项目学习视频资料哦!已经设置好了关键词自动回复,自动领取就好了!

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/news/1528858.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号