简单实现C语言中关于字符串的库函数

实现函数strlen
	#include<stdio.h>
	
	int Strlen(char *s){
		int count=0;
		while(*s!='\0'){
			count++;
			s++;
		}
		return count;
	}
	
	int main(){
		char *s,S[50];
		int len;
		printf("请输入一串字符:\n");
		gets(S);
		s=S;
		len=Strlen(s);
		printf("该字符串的长度为:%d\n",len);
		return 0;
	}
实现函数atoi
	#include<stdio.h>
	#include<ctype.h>
	#include<stdlib.h>
	
	int Atoi(char arr[]){
	
		int index = 0;//记录数组下标
	    int num = 0;  //存放最终要返回的值
	    int flag = 1; //设置符号标志位
	
		if(arr == NULL)
	    {
	        //非法输入
	        return -1;
	    }   
	        
	    while(isspace(arr[index]))//是空格返回非零值(不一定是1),否则返回0
	    {
	        index++;//跳过空格字符,不只有空格,还有\n,\r,\f,\t,\v之类的字符
	    }   
	    if(arr[index] == '-')
	    {
	        flag = -1; //除空格外遇到的第一个数字是符号,标记为-1
	    }   
	    //注意:正负号不算作1
	    if(arr[index] == '-' || arr[index] == '+')//如果遇到正负号,说明可以往后继续走
	    {
	        index++;
	    }
	    while(arr[index] >= '0' && arr[index] <= '9')//如果遇到的数字说明可以继续往下走
	    {
	        num = num*10 + arr[index] - '0';
	        index++;
	    }
	    return flag*num;
	}
	
	int main(){
		int n;
		char s[] = "-456er12";
		n=atoi(s);
		printf("该字符串转换为整数后为(调用库函数):%d\n",n);
		n=Atoi(s);
		printf("该字符串转换为整数后为(自己实现的库函数):%d\n",n);
		return 0;
	}
实现函数itoa
	#include<stdio.h>
	#include<stdlib.h>
	#include<assert.h>
	
	void invert(char *p, int N) //N为字符串长度
	{
	    assert(p != NULL);
	   
	    if (N == 1|| N == 0)   //当N是奇数时,N=1返回;当N是偶数时,N=0返回
	    {
	        return;
	    }
	    else
	    {
	        char ch = p[0];    //下面三条语句进行首尾字符交换
	        p[0] = p[N-1];
	        p[N-1] = ch;
	        invert(p+1, N-2);  //指针后移一位,字符串长度减2
	    }
	}
	
	void Itoa(int num,char *s){
		int index,m,flag,length;
		index=m=flag=length=0;
		if(num<0){
			num=-num;
			flag=-1;
		}
		do{
			m=num%10;          //m为num的最后一位
			num=num/10;        //num变为排除掉它自己最后一位后的数
			s[index++]=m+'0';  //将最后一位变为字符后加入字符串中
			length++;          //记录字符串长度
		}while(num);           //商为0时结束循环
		if(flag==-1){
			s[index++]='-';
			length++;
		}
		s[index]='\0';
		invert(s,length);
	}
	
	void main(){
		int num;
		char *s;
		s=(char*)malloc(50*sizeof(char));
		num=+12356789;
		printf("将%d变成字符串输出后为:",num);
		Itoa(num,s);
		puts(s);
	}
实现函数strcat
	#include<stdio.h>
	#include<stdlib.h>
	
	char* Strcat(char *s1,char *s2){ //将s2连接到s1后
		int i,j;
		char *s;
		if(s1==NULL||s2==NULL)
			return NULL;
		i=j=0;
		s=s1;
		while(s1[i])
			i++;
		while(s2[j])
			s1[i++]=s2[j++];
		s1[i]='\0';
		return s;
	}
	
	int main(){
		char s1[10]="123"; //这里用字符数组更好
		char s2[]="456";
		printf("s1=%s,s2=%s\n",s1,s2);
		Strcat(s1,s2);
		printf("将s2连接到s1后为:\n");
		printf("s1=%s\n",s1);
	}
实现函数strncat
	#include<stdio.h>
	#include<stdlib.h>
	
	char* Strncat(char *s1,char *s2,int n){ //将s2连接到s1后
		int i,j;
		char *s;
		if(s1==NULL||s2==NULL)
			return NULL;
		i=j=0;
		s=s1;
		while(s1[i])
			i++;
		while(s2[j]&&j<n)
			s1[i++]=s2[j++];
		s1[i]='\0';
		return s;
	}
	
	int main(){
		char s1[10]="123"; //这里用字符数组更好
		char s2[]="4567";
		printf("s1=%s,s2=%s\n",s1,s2);
		Strncat(s1,s2,2);
		printf("将s2的前2个字符连接到s1后为:\n");
		printf("s1=%s\n",s1);
	}
实现函数strcpy
	#include<stdio.h>
	
	char* Strncpy(char *s1,char *s2){
		int i=0;
		char *s;
	
		if(s1==NULL||s2==NULL)
			return NULL;
	
		s=s1;
		while(s2[i])
			s1[i]=s2[i++];
		s1[i]='\0';
		
		return s;
	}
	
	void main(){
		char s1[10]="";
		char s2[]="1234";
		printf("s2中元素为:%s\n",s2);
		Strncpy(s1,s2);
		printf("将s2赋值给s1后:s1=%s\n",s1);
	}
实现函数strncpy
	#include<stdio.h>
	
	char* Strncpy(char *s1,char *s2,int n){
		int i=0;
		char *s;
	
		if(s1==NULL||s2==NULL)
			return NULL;
	
		s=s1;
		while(i<n)
			s1[i]=s2[i++];
		s1[i]='\0';
		
		return s;
	}
	
	void main(){
		char s1[10]="";
		char s2[]="1234";
		printf("s2中元素为:%s\n",s2);
		Strncpy(s1,s2,3);
		printf("将s2的前三个元素赋值给s1后:s1=%s\n",s1);
	}
实现函数strcmp
	#include<stdio.h>
	
	int Strcmp(char *s,char *c){
		int i=0;
		while(s[i]&&c[i]){  //同时遍历二者
			if(s[i]>c[i])
				return 1;
			else if(s[i]<c[i])
				return -1;
			else
				i++;
		}
		if(s[i])            //谁没遍历完谁大,都遍历完了一样大
			return 1;
		else if(c[i])
			return -1;
		else
			return 0;
	}
	
	void main(){
		//char *s="123",*c="1234";
		char s[10],c[10];
		printf("请输入第一个字符串\n");
		gets(s);
		printf("请输入第二个字符串\n");
		gets(c);
		if(Strcmp(s,c)==1)
			printf("%s大于%s\n",s,c);
		else if(Strcmp(s,c)==-1)
			printf("%s小于%s\n",s,c);
		else
			printf("%s等于%s\n",s,c);
	}
实现函数strncmp
	#include<stdio.h>
	
	int Strncmp(char *s,char *c,int n){
		int i=0;
		while(i<n&&s[i]&&c[i]){   //同时遍历二者
			if(s[i]>c[i])
				return 1;
			else if(s[i]<c[i])
				return -1;
			else
				i++;
		}
		if(s[i]=='\0'||c[i]=='\0') //n至少长于二者中的一个
			return -2;
		else 
			return 0;
	}
	
	void main(){
		int n;
		char s[10],c[10];
		printf("请输入第一个字符串\n");
		gets(s);
		printf("请输入第二个字符串\n");
		gets(c);
		printf("请输入要比较的字符个数\n");
		scanf("%d",&n);
		if(Strncmp(s,c,n)==1)
			printf("%s的前%d个字符大于%s\n",s,n,c);
		else if(Strncmp(s,c,n)==-1)
			printf("%s的前%d个字符小于%s\n",s,n,c);
		else if(Strncmp(s,c,n)==0)
			printf("%s的前%d个字符等于%s\n",s,n,c);
		else 
			printf("字符串过短,不能比较\n");
	}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值