前言:
字符串是我们接触得比较频繁的一种数据类型,通常我们会调用<string.h>头文件里的函数进行字符串处理的相关操作,那么我们能否自己写自定义函数来实现相应的功能呢?接下来我们就来介绍一些常见的字符串处理自定义函数,相信通过下面的学习大家一定会对字符串处理有更加深刻的理解!
常见的字符串处理:
1、字符串求长度
#include <stdio.h>
int Mystrlen1(const char *str)
{
int i=0;
while(*(str++)!='\0')
{
i++;
}
return i;
}
int Mystrlen2(const char *str)
{
int i;
for(i=0;*(str++)!='\0';i++);
return i;
}
int main()
{
char a[100];
scanf("%s",a);
printf("%d\n",Mystrlen1(a));
printf("%d\n",Mystrlen2(a));
}
运行结果:
2、字符串拷贝(复制)
#include <stdio.h>
void Mystrcpy1(char *des,char *src)
{
while(*src!='\0')
{
*(des++)=*(src++);
}
*des='\0';
}
void Mystrcpy2(char *des,char *src)
{
int i;
for(i=0;*src!='\0';i++)
{
*(des++)=*(src++);
}
*des='\0';
}
void Mystrcpy3(char *des,char *src)
{
while( *(des++)=*(src++));
}
int main()
{
char a[100]="abcd";
char b[100]="123";
Mystrcpy1(a,b);
printf("%s\n",a);
char c[100]="abcd";
char d[100]="123";
Mystrcpy2(c,d);
printf("%s\n",c);
char e[100]="abcd";
char f[100]="123";
Mystrcpy3(e,f);
printf("%s\n",e);
}
运行结果:
3、字符串链接
#include <stdio.h>
void Mystrcat(char *des,const char *src)
{
while(*des!='\0')
{
des++;
}
while(*src!='\0')
{
*des++=*src++;
}
*des='\0';
}
int main()
{
char a[100]="abcd";
char b[100]="123";
Mystrcat(a,b);
printf("%s\n",a);
}
运行结果:
4、字符串比较
#include <stdio.h>
int Mystrcmp(const char *str1,const char *str2)
{
while(*str1==*str2 && *str1!='\0')
{
str1++;
str2++;
}
if(*str1=='\0'&&*str2=='\0')
{
return 0;
}
else
{
return *str1-*str2;
}
}
int main()
{
printf("%d\n",Mystrcmp("abc","ab"));
printf("%d\n",Mystrcmp("ab","abc"));
printf("%d\n",Mystrcmp("abc","abd"));
printf("%d\n",Mystrcmp("ab","ab"));
printf("%d\n",Mystrcmp("abad","abc"));
}
运行结果:
5、字符串逆序
#include <stdio.h>
void Reverse_str(char *str)
{
char *p;
char tmp;
for(p=str;*p!='\0';p++) ;
p--;
while(str<p)
{
tmp=*str;
*str=*p;
*p=tmp;
str++;
p--;
}
}
int main()
{
char str1[]="abc" ;
Reverse_str(str1);
printf("%s\n",str1);
return 0;
}
运行结果:
6、字符串转数字(“123”->123, "a123"->0,"123x4->123)
#include <stdio.h>
#include <ctype.h>
int Myatoi(const char *str)
{
int sum = 0;
while(isdigit(*str))//判断是否是数字
{
sum = sum*10 + (*str-'0');
str++;
}
return sum;
}
int main()
{
char str1[]="123" ;
char str2[]="a123" ;
char str3[]="12x3" ;
printf("%d\n",Myatoi(str1));
printf("%d\n",Myatoi(str2));
printf("%d\n",Myatoi(str3));
return 0;
}
运行结果:
7、数字转字符串
#include <stdio.h>
void Reverse_str(char *str)
{
char *p;
char tmp;
for(p=str;*p!='\0';p++) ;
p--;
while(str<p)
{
tmp=*str;
*str=*p;
*p=tmp;
str++;
p--;
}
}
void Myitoa(char *str,int n)//12345
{
int i = 0;
do
{
str[i++] = n%10 + '0';
n /= 10;
}while(n != 0);
str[i] = '\0';
Reverse_str(str);
}
int main()
{
int num=123;
char str[100];
Myitoa(str,123);
printf("%s",str);
}
运行结果: