一.字符串
1.字符串遍历
①数组方式
char str[]="Hello World";
for(int i = 0;'\0' != str[i];++i){
printf("%c\n",str[i]);
}
②指针方式
char str[]="Hello World";
for(int i = 0;'\0' != *(str+i);++i){
printf("%c\n",*(str+i));
}
简化:
while('\0' != *str){
printf("%c\n",*str++);
}
while(*str){
printf("%c\n",*str++);
}
2.字符串赋值
char s[] = "Hello World";
char* t;
t = s;
printf("%s\n",t);
没有产生新的字符串,只是s
和t
指向相同的字符串。下面是查看两个字符串的地址。
printf("%p\n",s);
printf("%p\n",t);
字符串的修改
char s[] = "Hello World";
char* t;
t = s;
printf("%s\n",t);
t[1] = 'o';
printf("%s\n",s);
printf("%s\n",t);
s[4] = 'e';
printf("%s\n",s);
printf("%s\n",t);
输出:
Hello World
Hollo World
Hollo World
Holle World
Holle World
3.字符串输入输出
char str[8];
scanf("%7s",str);
printf("%s\n",str);
“%7s”为最多允许输入7个字符,以防溢出;数组长度为7+1。
二.字符串与函数
void print_string(char str[]){
printf(str);
}
例:实现字符串交换函数
#include <stdio.h>
void swop(char **str1, char **str2)//二级指针,交换str1和str2 中的存储的地址
{
char *temp = NULL;
temp = *str1;
*str1 = *str2;
*str2 = temp;
}
int main()
{
char *str1 = "hello";
char *str2 = "world";
printf("str1 = %s, str2 = %s\n", str1, str2);
swop(&str1, &str2);
printf("str1 = %s, str2 = %s\n", str1, str2);
return 0;
}
三.字符串指针
字符数组可以直接初始化字符数组,并且可以赋值给指针。
char s[]="Hello World";
char* p = s;
printf("%s\n",p);
字符串也可以直接赋值给指针,这种指针称为字符串指针。
char* str="Hello World";
printf("%s\n",str);
四.字符串函数
1.获得字符串长度 strlen
strlen(字符数组名)
功能:计算字符串的实际长度(不含字符串结束标志“\0”)。
2.字符串复制 strcpy
strcpy(目的字符数组名,源字符数组名)
功能:把源字符数组中的字符串复制到目的字符数组中,字符串结束标志“\0”也一同复制。
注:
①目的字符数组要有足够的长度
②“目的字符数组名”必须写成数组名形式
“源字符数组名”可以是字符数组名,也可以是字符串常量
③不能用赋值语句将一个字符串常量或字符数组直接赋给一个字符数组
3.字符串连接 strcat
strcat(目的字符数组名,源字符数组名)
功能:把源字符数组中的字符串连接到目的字符数组中字符串的后面,并删去目的字符数组中原有的串结束标志“\0”。
注:目的字符数组要有足够的长度
4.字符串比较 strcmp
strcmp(字符数组名1,字符数组名2)
功能:按照ASCII码顺序比较两个数组中的字符串,并返回比较结果。
返回值:
字符串1=字符串2,返回值为0。
字符串1>字符串2,返回值为正数。
字符串1<字符串2,返回值为负数。
5.字符串大小写转换 strupr strlwr
strupr(字符串)
功能:将字符串中的小写字母转换成大写字母,其他字母不变。
strlwr(字符串)
功能:将字符串中的大写字母转换成小写字母,其他字母不变。
五.空字符串
使用字符串时必须初始化过,如果指针定义时无法确定初始值时,使用NULL
初始化指针。