C语言字符串相关的函数:strlen、strcpy、strcat、strcmp

常用的字符串处理函数

字符串的输入和输出:gets和puts

char * gets(char str) :从输入缓冲区中读取一个字符串存储到字符指针变量str所指向的内存空间。
puts(char
str):将字符串str输出。其中str是字符串数组名或者字符串指针。
区别

  • 输入字符串: scanf( )或gets ( )
    前者遇空格结束输入,后者遇回车结束输入
  • 输出字符串:printf()或puts()
    后者输出字符串后会自动换行,前者不会。
#include<stdio.h>
#include<string.h>
int main(){
	char str[80];
	gets(str);
	puts(str);
} 

求字符串长度 strlen (str)

计算字符串str的长度,直到空结束字符,但不包括空结束字符。

注:

  • 字符串最后的那个\0,是不计入在内的,而中间的空格是计入的。
  • 英文字母,字符,数字长度为1,中文汉字标点长度为2
#include<stdio.h>
#include<string.h>
int main(){
	int n;
	char str[80];
	gets(str);
	n= strlen(str);
	printf("%d\n",n);
}

i love you
10

考虑下用下面的指针可以不?

#include<stdio.h>
#include<string.h>
int main(){
	int n;
	char str[80] , *str2;
	gets(str2);
	n= strlen(str2);
	printf("%d\n",n);
}

当然是不行的,因为*str2是一个野指针,没有内存空间,是存不了东西的。如果用 s t r 2 = s t r *str2=str ,这时 s t r 2 *str2 就有指向的空间了,可以对其进行赋值。

#include<stdio.h>
#include<string.h>
int main(){
	int n;
	char str[80] , *str2=str;
	gets(str2);
	n= strlen(str2);
	printf("%d\n",n);
}

i love you!
12

字符串的复制:strcpy (str1, str2)

将str2复制到str1
注意,strcpy会将sre的最后0也拷贝,对于字符串的赋值不能直接用 = 符号,必须strcpy

#include<stdio.h>
#include<string.h>
int main(){
	char str[80] , str2[80]="i love you";//给str2赋初值
	puts(str2);//输出str2  i love you
	gets(str);//输入str  happy
	strcpy(str2,str);//将str的值赋值给str2
	puts(str2);//输出str2 happy
}

字符串连接strcat(str1, str2)

将str2追加到str1字符串的结尾
内部实现:从str1 开头开始找,找到‘\0’,找到以后将srtr1的第一一个字符覆
盖dst的这个‘\0’,直到src的最后-一‘\0’写进去。

#include<stdio.h>
#include<string.h>
int main(){
	int n;
	char str[80],str1[80]="you love me" , str2[80]="i love you ";
	puts(strcat(str1,str2));
}

you love me i love you

一字符串比较: strcmp(str1,str2)

两个字符串自左向右逐个字符相比(按 ASCII 值大小相比较),直到出现不同的字符或遇 \0 为止。
设这两个字符串为str1, str2,
若str1=str2,则返回零;
若str1 <str2,则返回负数;
若str1>str2,则返回正数。
内部是做减法操作

1."A"<"B" 
2."A"<"AB" 
3."Apple"<"Banana" 
4."A"<"a" 
5."compare"<"computer"

有关字符串与指针的知识可以看这里

猜你喜欢

转载自blog.csdn.net/weixin_45755332/article/details/106971441