龙空技术网

C语言总结_字符串全方位练习

DS小龙哥 70

前言:

当前你们对“c如何返回字符串”大致比较关切,同学们都想要了解一些“c如何返回字符串”的相关资讯。那么小编也在网络上网罗了一些有关“c如何返回字符串””的相关知识,希望朋友们能喜欢,兄弟们快快来学习一下吧!

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

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); //从键盘上录入字符串,字符串结尾: '\0'    //gets(str);       //从键盘上录入字符串    fgets(str,100,stdin); //从键盘上录入字符串 (标准输入)        //空格、小写字母、大写字母、数字 其他数据        /*1. 计算字符串的长度*/    while(str[len]!='\0')len++;    printf("len1=%d\n",len);    printf("len2=%d\n",strlen(str)); //计算字符串长度        /*2. 处理字符串*/    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]++;    }        /*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 <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); //从键盘上录入字符串 (标准输入)            /*1. 计算字符串的长度*/    len=strlen(str); //计算字符串长度        /*2. 字符串排序*/    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;               }        }    }        /*3. 打印结果*/    printf("%s\n",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;    /*    123456789    12    3456789    */    char src_str[100]="123456789";      char new_str[]="abcd";    int addr=2; //插入的位置        /*1. 计算字符串的长度*/    src_len=strlen(src_str); //"123"    new_len=strlen(new_str);        /*2. 字符串移动*/    for(i=src_len-1;i>addr-1;i--)    {        src_str[i+new_len]=src_str[i]; //向后移动 new_len    }        /*3. 插入新的数据*/    for(i=0;i<new_len;i++)src_str[addr+i]=new_str[i];        /*4. 打印字符串*/    src_str[src_len+new_len]='\0'; //在字符串结尾添加'\0'    printf("src_str=%s\n",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;        /*1. 录入字符串*/    printf("输入源字符串:"); //123dufvdfv123dfljvb    fgets(src_str,100,stdin); //从键盘上录入源字符串    //scanf("%s",src_str);        printf("输入查找的字符串:"); //123    fgets(find_str,10,stdin); //从键盘上录入源字符串    //scanf("%s",find_str);        /*2. 计算长度*/    src_len=strlen(src_str);    src_str[src_len-1]='\0';    src_len-=1; //src_len=src_len-1;        find_len=strlen(find_str); //"123\n" =4    find_str[find_len-1]='\0';    find_len-=1;        printf("源字符串:%s,%d\n",src_str,src_len);    printf("查找的字符串:%s,%d\n",find_str,find_len);        /*3. 查找字符串*/    for(i=0;i<src_len-find_len+1;i++)    {        for(j=0;j<find_len;j++)        {            //只有一次不相等就退出 //123kdfvfd  123            if(src_str[i+j]!=find_str[j])break;        }        if(j==find_len) //条件成立表示查找成功        {            cnt++;            i+=find_len-1;//向后移动        }    }        /*4. 打印查找结果*/    printf("cnt=%d\n",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;        /*1. 录入字符串*/    printf("输入源字符串:"); //123dufvdfv123dfljvb    fgets(src_str,100,stdin); //从键盘上录入源字符串        printf("输入查找的字符串:"); //123    fgets(del_str,10,stdin); //从键盘上录入源字符串        /*2. 计算长度*/    src_len=strlen(src_str);    src_str[src_len-1]='\0';    src_len-=1; //src_len=src_len-1;        del_len=strlen(del_str); //"123\n" =4    del_str[del_len-1]='\0';    del_len-=1;        printf("源字符串:%s,%d\n",src_str,src_len);    printf("删除字符串:%s,%d\n",del_str,del_len);    /*3. 查找*/    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++;            /*4.删除*/            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]='\0';    printf("src_str=%s\n",src_str);    printf("cnt=%d\n",cnt);    return 0;}
6. 字符串替换
字符串”1234567890”将456替换为”888” 最终: “1238887890”需要考虑3种情况
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=%d\n",data);    return 0;}/*函数功能: 字符串转为整数字符转为整数: -48 或者 -'0'1234*/int string_to_int(char str[]){    int value=0; //存放转换之后的结果    int i=0;    while((str[i]!='\0')&&(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=%s\n",str);    return 0;}/*函数功能: 整数转为字符串函数参数:    char str[]  //存放转换之后的整数(字符串)    int data    //待转换的整数*/void int_to_string(char str[],int data){    int i=0,j;    char tmp;    /*1. 将整数转为字符串*/    while(data)    {        str[i]=data%10+'0';        data/=10;        i++;    }    str[i]='\0';        /*2. 交换顺序*/    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=%s\n",str);	return 0;}/*函数功能: 浮点数转为字符串函数参数:	char str[]  //存放转换之后的 浮点数(字符串)	int data    //待转换的 浮点数*/void float_to_string(char str[],float data){	int i=0,j;	char tmp;	int addr;	int int_data=data; //得到整数 12345	int float_data=(data-int_data)*1000000;// 0.123456 *1000000 =123456	/*1. 将整数部分转为字符串*/	while(int_data)	{		str[i]=int_data%10+'0';		int_data/=10;		i++;	}	str[i]='.'; //添加小数点		/*2. 交换顺序: 整数*/	for(j=0;j<i/2;j++)	{		tmp=str[j];		str[j]=str[i-j-1];		str[i-j-1]=tmp;	}	   /*3. 将浮点数部分转为字符串*/   i++; //跨过小数点   addr=i;   while(float_data)   {		str[i]=float_data%10+'0';		float_data/=10;		i++;   }	str[i]='\0';		/*4. 交换顺序: 小数部分*/	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=%f\n",data);	return 0;}/*函数功能: 字符串转为浮点数字符转为整数: -48 或者 -'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;		/*1. 整数部分*/	while((str[i]!='\0')&&(str[i]>='0'&&str[i]<='9'))	{		int_value*=10;		int_value+=str[i]-'0';		i++;	}		/*2. 浮点数部分*/	i++; //跨过小数点	while((str[i]!='\0')&&(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;         /* 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]={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:%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=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);        /*2. 得到月份*/    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;        }    }    /*3. 天数*/    tm_mday=1;    while(sec>=24*60*60)    {        tm_mday++;        sec-=24*60*60;    }        /*4. 小时*/    tm_hour=0;    while(sec>=60*60)    {        tm_hour++;        sec-=60*60;    }    /*5. 分钟*/    tm_min=0;    while(sec>=60)    {        tm_min++;        sec-=60;    }    /*6. 秒*/    tm_sec=sec;}/*函数功能: 获取年份状态: 平年和闰年函数参数: year填年份返回值: 0表示平年 1表示闰年*/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("星期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数据解析
提取最基本的数据:(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语言输出一串字符串 #int转字符串c语言 #c语言把数字变成字符串怎么办 #cstring头文件有什么用