库函数的实现代码

1.strlen函数:
作用:检测字符串实际长度。
 如:
#include<stdio.h>
int main()
{
     char s[]="1234567";
     int a=strlen(s);
     printf("%d",a);
     return 0;
}

答案:a=7
 实际上strlen检测的是'\0',strlen函数碰到'\0'就返回'\0'以前的字符数 
再比如: 
char f[]="123456\01111"; 
int b=strlen(f);
答案:b=6,因为遇到了'\0' 
char h[4]={'f','0',0,'h'} ;
//注:不能写成char h[4]="f0\0h";因为以""括起来的为字符串, 它隐式的以'\0'结尾,而'\0'也占一个字节,所以应写为char h[5]="f0\0h";
int c=strlen(h);
答案:c=2,因为遇到了'\0'(注意'0'不等于'\0',而0等于'\0') 
不使用库函数实现代码如下:
>#include<stdio.h>
#include<assert.h>
int my_strlen(char *dest)
{
	int count = 0;
	assert(*dest!=NULL);
	while(*dest++)
	{
	    count++;
	}
	return  count;
}
int main()
{
	int system();
	int ret = 0;
	char arr[20]="we are happy";
	ret=my_strlen(arr);
	printf("%d\n",ret);
	return 0;
}
不用参数编写strlen函数:(递归函数)
#include <stdio.h>
#include <assert.h>
int my_strlen(const char *str)
{
	assert(str);
	if (*str)
	{
		return 1+my_strlen(++str);
	}
	else 
	{
		return 0;
	}
}
int main()
{
	int ret = 0;
	char arr[] = "abcdef";
	ret = my_strlen(arr);
	printf("%d",ret);
	return 0;
}
简单代码:
#include <stdio.h>
#include <assert.h>
int my_strlen(const char *str)
{
	assert(str);
	return (*str)?(1+my_strlen(str+1)):0;
}
int main()
{
	int ret = 0;
	char arr[] = "abcdef";
	ret = my_strlen(arr);
	printf("%d",ret);
	return 0;
}
2.strcpy函数:
作用:把后面的字符串复制给前面的字符串。
 例如: 定义一个字符串char a[20],和一个字符串c[]="i am a student!"; 把c复制到a中就可以这样用:strcpy(a,c); 这个函数包含在头文件 中.
 程序代码: 
#include<stdio.h>
#include<string.h>
int main() 
{
     char a[20]={0};
     char c[]="i am teacher!";
     strcpy(a,c); 
     printf("%s",a);
     return 0;
}
不使用库函数实现代码如下:
#include<stdio.h>
#include<assert.h>
char*  my_strcpy(char *dest,char *src)
{
	assert(*dest!=NULL);
	assert(*src!=NULL);
	while(*dest++=*src++);
	*dest='\0';
}
int main()
{
	int system();
	char arr[10];
	my_strcpy(arr,"happy");
	printf("%s\n",arr);
	return 0;
}
3.strstr函数:
 头文件:#include <string.h>
strstr()函数用来检索子串在字符串中首次出现的位置。
其原型为: char *strstr( char *str, char * substr );
【参数说明】str为要检索的字符串,substr为要检索的子串。
【返回值】返回字符串str中第一次出现子串substr的地址;如果没有检索到子串,则返回NULL。
【函数示例】strstr()函数的使用。
#include<stdio.h>
#include<string.h>
int main()
{
     char str[] = "http://see.xidian.edu.cn/cpp/u/xitong/";
     char*substr ="see";
     char*s =strstr(str, substr);
     printf("%s\n", s);
     return0;
}
运行结果:
see.xidian.edu.cn/cpp/u/xitong/
不使用库函数实现代码如下:
#include <stdio.h>
#include <string.h>
#include <assert.h>
int get_line(char line[],int limit)
{
	int ch = 0;
	int i = 0;
	while(--limit>1 && (ch = getchar()) && ch != '\n' && ch != EOF)
	{
		line[i++] = ch;
	}
	if(ch == '\n')
		line[i++] = '\n';
	line[i] = '\0';
	return i;
}
const char *match_str(const char *str,const char *substr)
{
	const char *cur = str;
	const char *str1 = NULL;
	const char *str2 = NULL;

	assert(str);
assert(substr);
if(*substr == '\0')
	{
		return str;
	}
    while(*cur)
	{
		str1 = cur;
		str2 = substr;
		while((*str1 == *str2) && (*str1))
		{
			str1++;
			str2++;
		}
		if(*str2 == '\0')
			return cur;
		cur = cur+1;
	}
	return NULL;
}
int main()
{
	char line[1024] = {0};
	while(get_line(line,1024))
	{
		if(match_str(line,"xy")!= NULL)
		{
			printf("%s",line);
		}
	}
	return 0;
}





  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以下是一个使用STM32的ADC函数和中断的示例代码: 1. 配置ADC模块: ``` ADC_InitTypeDef ADC_InitStructure; GPIO_InitTypeDef GPIO_InitStructure; /* Enable GPIO clock */ RCC_AHBPeriphClockCmd(RCC_AHBPeriph_GPIOA, ENABLE); /* Configure ADC1 Channel6 pin as analog input */ GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AN; GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL ; GPIO_Init(GPIOA, &GPIO_InitStructure); /* Enable ADC1 clock */ RCC_APB2PeriphClockCmd(RCC_APB2Periph_ADC1, ENABLE); /* Configure ADC1 */ ADC_InitStructure.ADC_Resolution = ADC_Resolution_12b; ADC_InitStructure.ADC_ScanConvMode = DISABLE; ADC_InitStructure.ADC_ContinuousConvMode = ENABLE; ADC_InitStructure.ADC_ExternalTrigConvEdge = ADC_ExternalTrigConvEdge_None; ADC_InitStructure.ADC_DataAlign = ADC_DataAlign_Right; ADC_InitStructure.ADC_NbrOfConversion = 1; ADC_Init(ADC1, &ADC_InitStructure); /* Enable ADC1 */ ADC_Cmd(ADC1, ENABLE); ``` 2. 配置中断: ``` NVIC_InitTypeDef NVIC_InitStructure; /* Configure and enable ADC interrupt */ NVIC_InitStructure.NVIC_IRQChannel = ADC1_IRQn; NVIC_InitStructure.NVIC_IRQChannelPriority = 0; NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; NVIC_Init(&NVIC_InitStructure); /* Enable ADC1 end of conversion interrupt */ ADC_ITConfig(ADC1, ADC_IT_EOC, ENABLE); ``` 3. 实现中断处理函数: ``` void ADC1_IRQHandler(void) { if (ADC_GetITStatus(ADC1, ADC_IT_EOC) != RESET) { /* Get ADC conversion result */ uint16_t adc_value = ADC_GetConversionValue(ADC1); /* Do something with adc_value */ /* Clear ADC1 end of conversion interrupt */ ADC_ClearITPendingBit(ADC1, ADC_IT_EOC); } } ```

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值