常用的字符串处理函数
字符串的输入和输出:gets和puts
char * gets(char str) :从输入缓冲区中读取一个字符串存储到字符指针变量str所指向的内存空间。
puts(charstr):将字符串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是一个野指针,没有内存空间,是存不了东西的。如果用 ,这时 就有指向的空间了,可以对其进行赋值。
#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"