文章目录
前言
c语言中常用的字符串处理函数strlen函数,strcpy函数,strcat函数,strcmp函数总结。
一、strlen函数使用
1、 使用
strlen函数返回的是在字符串中的个数,但不包含字符串结束符’\0’
#include<stdio.h>
#include<string.h>
int main()
{
char str1[] = "abcdef";
printf("%ld\n", strlen(str1));
return 0;
}
执行
```cpp
# gcc strlen.c -o strlen
./strlen
6
2、实现方法
#include<stdio.h>
#include<string.h>
size_t Strlen_char(const char* str1)
{
size_t len = 0;
while (*str1 != 0)
{
len++;
str1++;
}
return len;
}
int main()
{
char* str1 = "abcdef";
printf("%ld\n", Strlen_char(str1));
return 0;
}
执行
# gcc strlen.c -o strlen
./strlen
6
二、strcpy函数使用
1、使用
原型:
char *strcpy(char * destination, const char *source );
strcpy是覆盖拷贝,将source全覆盖拷贝到destination,会把’\0’也拷过去,estination的空间必须>=source的空间
#include<stdio.h>
#include<string.h>
int main()
{
char p1[] = "abcde";
char* p2 = "hello";
strcpy(p1, p2);
printf("%s\n", p1);
printf("%s\n", p2);
return 0;
}
执行
# gcc strcpy.c -o strcpy
# ./strcpy
hello
hello
2、实现方法
#include<stdio.h>
#include<string.h>
void stringcpy(char* char1 , const char *char2){
while(*char2){
*char1 = *char2;
char1++;
char2++;
//验证添加char1 = '\0';
if(*char2=='\0'){
printf("退出while循环,不执行*char1 = *char2; 没有赋值给char1结束符");
printf("\n");
}
}
*char1 = '\0';//添加char1 = '\0';
}
int main()
{
char str1[5] = "abcde";
const char* p = "hello";
stringcpy(str1, p);
printf("%s\n", str1);
printf("%s\n", p);
return 0;
}
执行
$ gcc strcpy.c -o strcpy
$ ./strcpy
退出while循环,不执行*char1 = *char2; 没有赋值给char1结束符
hello
hello
三、strcat函数使用
1、使用
原型:
char *strcat ( char * destination, const char * source );
strcat追加拷贝,追加到目标空间后面,目标空间必须足够大,能容纳下源字符串的内容
#include<stdio.h>
#include<string.h>
int main()
{
char p1[20] = "Hello";
const char* p2 = "World";
strcat(p1, p2);
printf("%s\n",p1);
return 0;
}
$ gcc strcat.c -o strcat
$ ./strcat
HelloWorld
2、实现方法
#include<stdio.h>
#include<string.h>
void stringcat(char *str1,const char *str2){
while(*str1){
str1++;
}//str1结束循环,当前是str1的存放值是'\0'
if(*str1=='\0'){
while(*str2){
*str1 = *str2;//str2的首个字符 W,替换赋值当前是str1的存放值是'\0'
str1++;
str2++;
}
str1='\0';
}
}
int main()
{
char p1[20] = "Hello";
const char* p2 = "World";
stringcat(p1, p2);
printf("%s\n",p1);
return 0;
}
执行
$ gcc strcat.c -o strcat
$ ./strcat
HelloWorld
四、strcmp函数使用
原型
int strcmp ( const char * str1, const char * str2 );
strcmp比较两个字符串的大小,一个字符一个字符比较,按ASCII码比较
规定:
第一个字符串大于第二个字符串,则返回大于0的数字
第一个字符串等于第二个字符串,则返回0
第一个字符串小于第二个字符串,则返回小于0的数字
注意:strcmp函数比较两字符串的大小,和字符串本身长度无关
1、使用
#include<stdio.h>
#include<string.h>
int main()
{
char* p1 = "abc";
char* p2 = "abc";
char* p3 = "abcd";
char* p4 = "e";
printf("----------------------\n");
printf(" %d\n", strcmp(p1,p2 ));
printf("----------------------\n");
printf(" %d\n", strcmp(p2,p3));
printf(" %d\n", strcmp(p3,p2));
printf("----------------------\n");
printf(" %d\n", strcmp(p3,p4));//ASCII 'a' - 'e' = 97 - 101 = -4
printf(" %d\n", strcmp(p4,p3)); //ASCII 'a' - 'e' = 101 - 4 = -4
printf(" %d\n", 'a');
printf(" %d\n", 'e');
}
}
执行
$ gcc strcmp.c -o strcmp
$ ./strcmp
----------------------
0
----------------------
-100
100
----------------------
-4
4
97
101
2、实现方法
#include<stdio.h>
#include<string.h>
int Strintcmp(const char * str1, const char * str2)
{
//1、两个不同的字符串比较时,直接 return (*str1-*str2);//返回两字符相减的ASCII码值
//2、字符串相同时进入while循环,字符串结束符是'\0',添加一个循环的结束条件!(*str1|*str2)=='\0')
while ((*str1 == *str2)&&(!(*str1|*str2)=='\0')){
str1++;
str2++;
}
return (*str1-*str2);//返回两字符相减的ASCII码值
}
int main()
{
char* p1 = "abc";
char* p2 = "abc";
char* p3 = "abcd";
char* p4 = "e";
printf("----------------------\n");
printf(" %d\n", Strintcmp(p1,p2 ));
printf("----------------------\n");
printf(" %d\n", Strintcmp(p2,p3));
printf(" %d\n", Strintcmp(p3,p2));
printf("----------------------\n");
printf(" %d\n", Strintcmp(p3,p4));
printf(" %d\n", Strintcmp(p4,p3));
printf(" %d\n", 'a');
printf(" %d\n", 'e');
}
执行
$ gcc strcmp.c -o strcmp
$ ./strcmp
----------------------
0
----------------------
-100
100
----------------------
-4
4
97
101