我的编程空间,编程开发者的网络收藏夹
学习永远不晚

C语言封装函数字符串练习汇总分享

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

C语言封装函数字符串练习汇总分享

封装函数: 判断闰年和平年

该函数判断传入的年份是否是闰年和平年,通过返回值表示结果。

#include <stdio.h>
//函数声明
int GetYearSate(int year);

int main()
{
    int year;
    printf("请输入年份:");
    scanf("%d",&year);
    //判断闰年和平年
    if(GetYearSate(year))
    {
        printf("平年.\n");
    }
    else
    {
        printf("闰年.\n");
    }
    return 0;
}


int GetYearSate(int year)
{
    if((year%4==0 && year%100!=0)||(year%400==0))
    {
        return 0;
    }
    return 1;
}

封装函数: 字符串查找(参考strstr)

第一步查看帮助: man strstr

#include <stdio.h>
#include <string.h> //声明函数的
char *my_strstr(char *class="lazy" data-src_str,char *find_str);
int main()
{
    char class="lazy" data-src_str[100];//"123456789"
    char find_str[100];
    printf("请输入字符串:");
    scanf("%s",class="lazy" data-src_str);
    printf("请输入查找的字符串:");
    scanf("%s",find_str);
    
    //strstr() //查找到指定的字符串,会返回查找字符串在源字符串里的首地址
    printf("查找的字符串结果:%s\n",strstr(class="lazy" data-src_str,find_str));
    printf("查找的字符串结果:%s\n",my_strstr(class="lazy" data-src_str,find_str));
   return 0;
}

//函数功能: 字符串查找函数
//返回值: 返回查找到的字符串地址
char *my_strstr(char *class="lazy" data-src_str,char *find_str)
{
    int class="lazy" data-src_len;
    int find_len;
    int i,j;
    class="lazy" data-src_len=strlen(class="lazy" data-src_str);
    find_len=strlen(find_str);
    for(i=0;i<class="lazy" data-src_len;i++)
    {
        for(j=0;j<find_len;j++)
        {
            if(class="lazy" data-src_str[i+j]!=find_str[j])break;
        }
        //判断是否查找成功
        if(j==find_len)
        {
            //return &class="lazy" data-src_str[i];
            return class="lazy" data-src_str+i;
        }
    }
    return NULL;
}

封装函数: 字符串比较(参考strcmp)

#include <stdio.h>
#include <string.h> //声明函数的
int my_strcmp(char *s1,char *s2);

int main()
{
    char str1[100];//"123456789"
    char str2[100];
    printf("请输入字符串1:");
    scanf("%s",str1);
    printf("请输入字符串2:");
    scanf("%s",str2);
    
    //int strcmp(const char *s1, const char *s2);
    //比较两个字符串是否相等。通过返回值表示。
    printf("比较字符串的结果:%d\n",strcmp(str1,str2));
    printf("比较字符串的结果:%d\n",my_strcmp(str1,str2));
    return 0;
}


int my_strcmp(char *s1,char *s2)
{
    while(*s1!='\0' && *s2!='\0')
    {
        if(*s1!=*s2)break;
        s1++;
        s2++;
    }
    if(*s1=='\0'&&*s2=='\0')return 0;
    return 1;
}

封装函数: 字符串拼接(参考strcat)

#include <stdio.h>
#include <string.h> //声明函数的
char *my_strcat(char *s1,char *s2);

int main()
{
    char str1[100];//"123456789"
    char str2[100];
    printf("请输入字符串1:");
    scanf("%s",str1);
    printf("请输入字符串2:");
    scanf("%s",str2);
    
    //strcat 字符串拼接函数,拼接之后返回源字符串的首地址
   // printf("拼接的结果:%s\n",strcat(str1,str2));
    printf("拼接的结果:%s\n",my_strcat(str1,str2));
    return 0;
}

//函数功能: 字符串拼接
char *my_strcat(char *s1,char *s2)
{
    char *p=s1; //记录源字符串的首地址
    while(*s1 != '\0'){s1++;} //偏移到结尾
    while(*s2!='\0')
    {
        *s1=*s2;
        s2++;
        s1++;
    }
    *s1='\0';
    return p;
}

封装函数: 字符串转整数(参考atoi)

#include <stdio.h>
#include <string.h>
int my_atoi(char *str);
int main()
{
    char buff[100];
    printf("请输入一个整数字符串:");
    scanf("%s",buff);
    //字符串转整数
    printf("转换结果:%d\n",atoi(buff));
    printf("转换结果:%d\n",my_atoi(buff));
    return 0;
}


//"123ABC"
int my_atoi(char *str)
{
    int data=0;
    while(*str!='\0')
    {
        if(*str>='0' && *str<='9')
        {
            data*=10; //0  10 120
            data+=*str-'0';//1 12 123
        }
        else
        {
            break;
        }
        str++;
    }
    return data;
}

封装函数: 字符串转浮点数(参考atof)

“123.456789”    456789—>0.456789
#include <stdio.h>
#include <string.h>
#include <stdlib.h>

double my_pow(double x,int y);
double my_atof(char *str,int cnt);

int main()
{
    char buff[100];
    printf("请输入一个浮点数字符串:");
    scanf("%s",buff);
    //字符串转浮点数
    printf("转换结果:%lf\n",atof(buff));
    printf("转换结果:%lf\n",my_atof(buff,3));
    return 0;
}


//"123.456  123"
double my_atof(char *str,int cnt)
{
    int data=0;
    int cnt_f=0;
    double data_f=0.0;
    while(*str!='\0' && *str!='.')
    {
        if(*str>='0' && *str<='9')
        {
            data_f*=10;
            data_f+=*str-'0';
        }
        else
        {
            break;
        }
        str++;
    }
    str++; //跳过 "."   "123.456789"
    while(*str!='\0' && cnt_f!=cnt)
    {
        if(*str>='0' && *str<='9')
        {
            data*=10;
            data+=*str-'0';
            cnt_f++; //记录小数部分数量
        }
        else
        {
            break;
        }
        str++;
    }
    
    //合成浮点数  "123.456"
    if(cnt>cnt_f)
    {
        cnt=cnt_f;
    }
    data_f+=data*my_pow(0.1,cnt);
    return data_f;
}

//函数功能:计算x的y次方
//my_pow(2,3);
double my_pow(double x,int y)
{
    double tmp=1.0;
    int i;
    for(i=0;i<y;i++)
    {
        tmp=tmp*x;//2.0  4.0  8.0
    }
    return tmp;
}

封装函数: 整数转字符串 123 “123”

#include <stdio.h>
#include <string.h>
#include <stdlib.h>

void int_to_str(char *str,int data);
int main()
{
    int data;
    char buff[100];
    printf("请输入一个整数:");
    scanf("%d",&data);
    //整数转字符串
    int_to_str(buff,data);
    printf("buff=%s\n",buff);
    return 0;
}


void int_to_str(char *str,int data)
{
    char buff[100]; //存放第一次分离的数据
    int i=0;
    int j=0;
    while(data) //123
    {
        buff[i]=data%10+'0';
        data=data/10;
        i++;
    }
    for(j=0;j<i;j++)
    {
        str[j]=buff[i-1-j];
    }
    str[j]='\0';
}

//函数功能:计算x的y次方
//my_pow(2,3);
double my_pow(double x,int y)
{
    double tmp=1.0;
    int i;
    for(i=0;i<y;i++)
    {
        tmp=tmp*x;//2.0  4.0  8.0
    }
    return tmp;
}

封装函数: 浮点数转字符串 123.456 – “123.456”

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int my_pow(int x,int y);
void int_to_str(char *str,int data);
void double_to_str(char *str,double data_f,int cnt);
int main()
{
    double data;
    char buff[100];
    printf("请输入一个浮点数:");
    scanf("%lf",&data);
    double_to_str(buff,data,5);
    printf("buff=%s\n",buff);
    return 0;
}


void double_to_str(char *str,double data_f,int cnt)
{
    char buff[50]; //存放第一次分离的数据
    int i=0;
    int j=0;
    int n=0;
    int data_i1;
    int data_i2;
    double temp_f;
      //123.3
    data_i1=data_f; //123
    temp_f=data_f-data_i1;
    data_i2=temp_f*my_pow(10,cnt); //456
    
    while(data_i1)
    {
        buff[i]=data_i1%10+'0';
        data_i1=data_i1/10;
        i++;
    }
    
    for(j=0;j<i;j++)
    {
        str[j]=buff[i-1-j];
    }
    str[j]='.';
       // "123.456"
    while(data_i2)
    {
        buff[n]=data_i2%10+'0';
        data_i2=data_i2/10;
        n++;
    }
    
    for(j=0;j<n;j++)
    {
        str[j+i+1]=buff[n-1-j];
    }
    str[j+i+1]='\0';
}

//函数功能:计算x的y次方
//my_pow(2,3);
int my_pow(int x,int y)
{
    int tmp=1;
    int i;
    for(i=0;i<y;i++)
    {
        tmp=tmp*x;//2.0  4.0  8.0
    }
    return tmp;
}

浮点数转字符串 123.456  -- “123.456” 

float a=123.456;
int b=a; //b=123
a=a-b;  //a=0.456  10*10*10

封装函数: 判断回文字符串

该函数判断传入的字符串是否是回文,通过返回值表示结果。

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int func(char *p);
int main()
{
    char buff[100];
    printf("输入字符串:");
    scanf("%s",buff);
    if(func(buff))printf("回文.\n");
    else printf("不是回文.\n");
    return 0;
}

//函数功能: "123"  "121"
int func(char *p)
{
    int i;
    int len;
    len=strlen(p);
    for(i=0;i<len/2;i++)
    {
        if(p[i]!=p[len-1-i])break;
    }
    if(i==len/2)return 1; //回文
    return 0; //不是回文
}

封装函数: 字符串替换

将源字符串里指定的单词替换成指定单词。

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
void str_func(char *str1,char *str2,char *str3);
int main()
{
    char str1[100];
    char str2[100];
    char str3[100];
    
    printf("输入源字符串:");
    scanf("%s",str1);
    printf("输入查找的字符串:");
    scanf("%s",str2);
    printf("输入替换的字符串:");
    scanf("%s",str3);
    str_func(str1,str2,str3);
    
    printf("str1=%s\n",str1);
    return 0;
}


//"123A789"   ""
void str_func(char *str1,char *str2,char *str3)
{
    int str1_len=0;
    int str2_len=0;
    int str3_len=0;
    int i,j;
    int cnt=0;
    
    
    str1_len=strlen(str1);
    str2_len=strlen(str2);
    str3_len=strlen(str3);
    
    for(i=0;i<str1_len;i++)
    {
        //查找字符串
        for(j=0;j<str2_len;j++)
        {
            if(str1[i+j]!=str2[j])break;
        }
        //如果查找成功就进行替换
        if(j==str2_len)
        {
            //总长度变短了
            if(str2_len>str3_len)
            {
                cnt=str2_len-str3_len; //差值
                //完成数据向前移动--覆盖
                for(j=i+str2_len-cnt;j<str1_len;j++)
                {
                    str1[j]=str1[j+cnt];
                }
                str1[str1_len-cnt]='\0';
            }
            //总长度变长了
            else if(str2_len<str3_len)
            {
                cnt=str3_len-str2_len; //差值
                //完成数据向后移动
                for(j=str1_len;j>=i+str2_len;j--)
                {
                    str1[j+cnt]=str1[j];
                }
                str1[str1_len+cnt]='\0';
            }
            //替换
            for(j=0;j<str3_len;j++)
            {
                str1[i+j]=str3[j];
            }
            //重新计算长度
            str1_len=strlen(str1);
        }
    }
}

封装函数: 清除二维数组的指定行

该函数功能可以通过传入的参数,清除指定二维数组的指定一行数据为0.

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
void clear(int (*p)[5],int a,int b);
int main()
{
    int i,j;
    int buff[][5]=
    {
        {1,2,3,4,5},
        {11,12,13,14,15},
        {21,22,23,24,25}
    };
    printf("源数据:\n");
    for(i=0;i<sizeof(buff)/sizeof(buff[0]);i++)
    {
        for(j=0;j<sizeof(buff[0])/sizeof(buff[0][0]);j++)
        {
            printf("%d ",buff[i][j]);
        }
        printf("\n");
    }
    
    clear(buff,888,2);
    
    printf("清除之后的数据:\n");
    for(i=0;i<sizeof(buff)/sizeof(buff[0]);i++)
    {
        for(j=0;j<sizeof(buff[0])/sizeof(buff[0][0]);j++)
        {
            printf("%d ",buff[i][j]);
        }
        printf("\n");
    }
    return 0;
}

void clear(int (*p)[5],int a,int b)
{
    int i;
    for(i=0;i<sizeof(p[0])/sizeof(p[0][0]);i++)
    {
        p[b][i]=a;
    }
}

封装函数:字符串里所有大写字母互相替换

将字符串里所有大写字母全部换成小写字母。或者小写字母全部换成大写字母。可以通过形参进行区分。 该功能广泛用在验证码功能上。

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
void func(char *str,int flag);
int main()
{
    char buff[100];
    printf("从键盘上输入字符串:");
    scanf("%s",buff);
    printf("源字符串:%s\n",buff);
    func(buff,0);
    printf("大写转换小写:%s\n",buff);
    func(buff,1);
    printf("小写转大写:%s\n",buff);
    return 0;
}

//函数功能: 大写小写转换
//flag=0表示大写转换小写  =1表示小写转大写
void func(char *str,int flag)
{
    int data;
    while(*str!='\0')
    {
        if(flag)
        {
            if(*str>='a'&& *str<='z') //小写
            {
                *str=*str-32;
            }
        }
        else
        {
            if(*str>='A'&& *str<='Z') //小写
            {
                *str=*str+32;
            }
        }
        str++;
    }
}

封装GPS解码函数:可以传入GPS格式的字符串

该函数可以传入GPS格式的字符串,在函数里完成所有数据解码输出。经度、纬度、卫星的数量、时间

#include <stdio.h>
#include <string.h>
#include <stdlib.h>

char gps_buff[]=
{
    "$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"
};


int GPS_GetData(char *gps_class="lazy" data-src,char *find_head,char *buff,int cnt)
{
    char *p;
    int number=0; //提取的数量
    int a=0;
    p=strstr(gps_class="lazy" data-src,find_head);
    if(p!=NULL)
    {
        //查找逗号的位置
        while(*p!='\0')
        {
            if(*p==',')a++; //记录逗号的数量
            if(a==cnt)break; //逗号找成功了
            p++;
        }
        p++; //跨过当前逗号
        //提取数据
        while(*p!='\0')
        {
            if(*p==',')break; //遇到逗号停止提取数据
            buff[number]=*p;
            p++;
            number++;
        }
        buff[number]='\0';
    }
    return number;
}

int main()
{
    char buff[100];
    GPS_GetData(gps_buff,"$GNGGA",buff,2);
    printf("纬度:%s\n",buff);
    GPS_GetData(gps_buff,"$GNGGA",buff,4);
    printf("经度:%s\n",buff);
    return 0;
}

封装函数: 将十进制整数转为16进制输出(字符串形式)

#include <stdio.h>
//定义16进制的数据,方便输出
char hex_val[16]={'0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F'}; 
int main() 
{ 
    int number=0;
    int a[100]; 
    int i=0; 
    int data; 
    
    printf("输入一个整数:"); 
    scanf("%d",&number); 
    
    while(number>0) 
    { 
        data=number%16; 
        a[i]=data; 
        number=number/16; 
        i++;
    } 
    printf("输入整数的十六进制数: 0x"); 
    
    for(i=i-1;i>=0;i--)
    {
        printf("%c",hex_val[a[i]]); 
    } 
    printf("\n"); 
}

到此这篇关于C语言封装函数字符串练习汇总分享的文章就介绍到这了,更多相关C语言字符串内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

C语言封装函数字符串练习汇总分享

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

C语言怎么封装函数字符串

这篇文章主要讲解了“C语言怎么封装函数字符串”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“C语言怎么封装函数字符串”吧!封装函数: 判断闰年和平年该函数判断传入的年份是否是闰年和平年,通过返
2023-06-29

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录