C语言常用字符串处理函数
在我们的日常c语言编程中,对于字符串的处理,往往会出现不同种类的错误。其中,最常见的错误就是函数调用错误。这是因为我们对于字符串处理函数还没有真真地理解。下面,让我们来深刻理解这些函数的实现过程:
字符串的几种常用表示方法:
1.字符串常量
即:位于一对双括号中的任何字符。双引号里的字符加上编译器自动提供的结束标志\0字符,作为一个字符串存储在内存中。如:printf("%s",“hello”); //“hello”
2.字符串数组
char m[100] = “hello,world”; //定义字符串数组时必须指定数组大小(整型常量),在指定大小时,要确保数组的大小比预定的大一个,因为编译器会自动添加’\0’。
char m={‘h’,‘e’,‘l’,’\0’}; //注意标志结束的空字符,若没有它,得到的只是一个字符数组而不是字符串
3.利用char指针定义字符串
char *m = “hello,world”; //自动添加’\0’
lenght()的重写
常规方法
#include<stdio.h>
int Mystrlen(); //函数声明
int main()
{
char str1[10]="12345678";
printf("%d\n",Mystrlen(str1));
return 0;
}
int Mystrlen(char str1[])
{
int i=0;
while(str1[i]!='\0')
{
i++;
}
return i;
}
指针处理
#include<stdio.h>
int Mystrlen();
int main()
{
char str1[10]="12345678";
printf("%d\n",Mystrlen(str1));
return 0;
}
int Mystrlen(char *str1)
{
int count=0;
while(*str1!='\0')
{
count++;
str1++;
}
return count;
}
运行结果
strcat()的重写
常规方法
#include<stdio.h>
#include<string.h>
void Mystrcat();
int main()
{
char str1[20]="123";
char str2[5]="456";
Mystrcat(str1,str2);
printf("%s\n",str1);
return 0;
}
void Mystrcat(char str1[],char str2[])//将字符串str2连接到str1,与要保证str1数组内存足够大。
{
int i;
int len1=strlen(str1);
int len2=strlen(str2);
for (i=0;i<len2;i++)
{
str1[len1+i] = str2[i];
}
str1[len1+i]='\0';
}
指针处理
#include<stdio.h>
void Mystrcat();
int main()
{
char str1[20]="123";
char str2[5]="456";
Mystrcat(str1,str2);
printf("%s\n",str1);
return 0;
}
void Mystrcat(char *str1,char *str2)//数组作为形参被传递,可以采用指针。
{
while(*str1!='\0')
str1++;
while(*str1++=*str2++);
}
运行结果
strcmp()的重写·
常规方法
#include<stdio.h>
int Mystrcmp(char str1[],char str2[]);
int main()
{
char str1[5]="abc";
char str2[5]="abcd";
printf("%d\n",Mystrcmp(str1,str2));
return 0;
}
int Mystrcmp(char str1[],char str2[])
{
int i=0;
int sum=0;
while(str1[i]!='\0' || str2[i]!='\0')
{
if(str1[i]==str2[i])
{
sum=0;
}
else
{
sum=str1[i]-str2[i];
return ;
}
i++;
}
return sum;
}
指针处理
//指针操作
#include<stdio.h>
int Mystrcmp();
int main()
{
printf("%d\n",Mystrcmp("xyz","abc"));
printf("%d\n",Mystrcmp("abc","abcd"));
printf("%d\n",Mystrcmp("abc","xyz"));
return 0;
}
int Mystrcmp(char *str1,char *str2)
{
while(*str1==*str2 && *str1!='\0')
{
str1++;
str2++;
}
return *str1-*str2;
}
运行结果
strcpy()的重写
常规方法
#include<stdio.h>
void Mystrcpy();
int main()
{
char str1[7];
char str2[5]="abc";
Mystrcpy(str1,str2);
printf("%s\n",str1);
return 0;
}
void Mystrcpy(char str1[],char str2[])
{
int i;
for(i=0;str2[i]!='\0';i++)
{
str1[i]=str2[i];
}
str1[i]='\0';
}
指针处理
//指针操作
#include<stdio.h>
int Mystrcmp();
int main()
{
printf("%d\n",Mystrcmp("xyz","abc"));
printf("%d\n",Mystrcmp("abc","abcd"));
printf("%d\n",Mystrcmp("abc","xyz"));
return 0;
}
int Mystrcmp(char *str1,char *str2)
{
while(*str1==*str2 && *str1!='\0')
{
str1++;
str2++;
}
return *str1-*str2;
}
运行结果
字符串知识总结:
1、c语言约定’\0’作为字符串的结束标志,它占用内存空间,但不计入串的长度。
2、在strcat()和strcopy()重写的常规方法,需要手动添加结尾标志’\0’。
3、在字符串数组作为形式参数表示时,可以用""+数组名,例如str。
4、字符串的输出格式为:%s。