嵌入式学习D(Day8)

本文展示了如何在C语言中不使用标准库函数如strcpy、strcat和strlen等进行字符串操作,以及实现闰年判断和日期计算功能,通过自定义函数提高代码复用和模块化
摘要由CSDN通过智能技术生成

不使用strcpy将通过输入得到的数组str 拷贝到数组dst

#include<stdio.h>
#include<string.h>
int main(void)
{
     char str[32] = {0};
     char dst[32] = {0};
     int i = 0;
     gets(str);
     while (str[i] != '\0')
     {
         dst[i] = str[i];
         i++;                                
     }
     dst[i] = '\0';
     puts(str);
     puts(dst);
 
     return 0;
 }

不使用strcat 将字符串数组dst 添加到数组str

int main()
 {
      int i = 0;
      char str[32] = {0};
      char dst[32] = {0};
      int len = 0, len2 = 0;
      gets(str);
      gets(dst);
      len = strlen(str);
      len2 = strlen(dst);
  /*  for (i = 0; i < len2; i++)
      {
           if (dst[i] != '\0')
           {
              str[i+len] = dst[i];
           }
      } */
      while (dst[i] != '\0')
      {
          str[i+len] = dst[i];
          i++;
      }
      str[i+len] = '\0';                                                                                                    
      puts(str);
      puts(dst);
  
      return 0;
  }

不使用strlen实现strlen的功能

#include<stdio.h>
int main()
{
    char str[32] = 0;
    int i = 0, cnt = 0;
    gets(str);
    while (str[i] != '\0')
    {
        i++;
        cnt++;
    }
    printf("%d\n",cnt);
    return 0;
}

不使用strcmp实现strcmp的功能

include<stdio.h>
 int main()
 {
     int i = 0, a = 0;
     char str1[32] = {0};
     char str2[32] = {0};
     gets(str1);
     gets(str2);
     for (i = 0;; i++)
     {
         if (str1[i] == str2[i]){}                                                                                         
         else {a = str1[i]- str2[i];break;}
     }
     printf("a= %d\n",a);
     return 0;
 }

        封装三个函数: 函数1,传入年份,获得该年是闰年还是平年,闰年返回1 平年返回0 int IsLeep(int Year); 函数2,传入年-月-日信息 打印出这一天是该年的第几天 int GetDay(int Year, int Mon, int Day); 函数3,传入年-月-日信息,打印该年剩余多少天 int GetLeft(int Year, int Mon, int Day);

#include<stdio.h>
int leep(int x)
{	
	int c = 0;
	if (x % 4 == 0)
	{
		if(x % 400 ==0)
		{c = 1;}
		else if (x % 100 == 0)
		{
			c = 0;
		} 
		else c = 1;
	}
	else c = 0;
	
	return c;
}
int getday(int year, int mon, int day)
{
	int d = 0;
	int i = 0;
	d =leep(year);
	for(i= mon - 1; i > 0; i--)
	{
		if (i == 10|| i ==8 || i == 7 || i == 5||  i ==3 || i == 1)
		{
			day += 31;
		}
		else if (i==11|| i==9|| i==6|| i==4) {day+=30;}
		else {if (d == 0) day +=28;
			else if (d == 1) day +=29;}
	}
	return day;
}
int getleft(int year,int mon,int day)
{
	int k = 0;
	int c = leep(year);
	int j = getday(year,mon,day);
	if (c==0) k = 365 - j;
	else k =366 - j;
	return k;
}
int main()
{
	int year = 0;
	int mon = 0;
	int day = 0;
	int b = 0;

	scanf("%d",&year);
	scanf("%d%d",&mon,&day);

	leep(year);
	getday(year, mon, day);
	getleft(year,mon,day);

	printf("year is leep ? %d\n",leep(year));
	printf("getday is %d\n", getday(year,mon,day));	
	printf("getleft is %d\n", getleft(year,mon,day));	
	return 0;
}

1.字符串常见操作:

    1.strlen:

        获得字符串的长度

    2.strcpy

        字符串的拷贝

        注意:目的空间一定要足够大存放的下源字符串

    3.strcat

        字符串的拼接,在第一个字符串末尾拼接上第二个字符串

        注意:第一个字符串要空间足够大

    4.strcmp

        字符串的比较

2.二维字符型数组:

    1.定义:

        数据类型 数组名[行数][列数];

        char str[5][32];

    2.存储:

        1.连续性

        2.有序性

    3.初始化

        1.局部初始化:

        char str[5][32] = {"hello", "world", "how", "are", "you"};

        char str[5][32] = {0};

函数:

    特性:

        1.避免重复性代码

        2.程序代码模块化

    1.函数的定义:

        函数类型  函数名(数据类型1 形式参数1, 数据类型2 形式参数2, ...)

        {

            函数体;

            return 返回值;

        }

        函数类型:函数运行结果的类型

                int float double char void

                1.函数类型如果不写,默认为int类型

                2.函数返回值缺省,应该写void类型

                3.函数类型应该与返回值的类型一致,如果不一致以函数类型为准

       

        函数名:

            1.由字母、数字和下划线构成,不能以数字开头

            2.不要与C语言关键字重名

            3.最好不要与C语言库函数重名

            4.最好见名知意(动宾形式)

           

    2.函数的调用:

        函数名(实际参数1, 实际参数2, ...);

        注意:

            1.实参个数必须与形参个数一一对应

            2.实参可以是常量、变量、或者表达式

            3.函数调用时会发生实参向形参空间的拷贝,实参将值拷贝给形参(一一对应),实参类型与形参类型不一致时,将实参类型默认转换为形参类型

    3.函数的声明:

        定义: 定义需要为变量开辟空间

        声明: 该变量是存在的,不需要开辟空间

        如果被调函数的定义在主调函数的下方,需要对被调函数声明一下

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值