一.两种定义字符串的方式
1.利用字符数组+双引号的方式定义字符串
简单案例:
#include
int main() {
char str[] = "abc";
printf("%s\n", str);
}
注意:
①:在底层逻辑中,实际存储的时候,c语言还是会帮我们把字符串转换成字符数组进行保存,并且还要在末尾加上'\0'(表示字符串结束)
②:数组的长度要么不写,如果要写就要记得把结束标记('\0')的空间给预留出来(一个字节)
③:如果我们用字符数组+双引号的方式定义字符串,那么字符串的内容是可以改变的
2.利用指针+双引号的方式定义字符串
简单案例:
#include
int main() {
char* str= "abc";
printf("%s\n", str);
}
注意:
①:在底层逻辑中,c语言还是会帮我们把字符串转换成字符串数组进行保存,并且在末尾加上'\0'
②:利用指针+双引号的方式定义字符串的话会把底层的字符数组放在只读区
只读常量区的特点:
①:内容是不可以修改的
②:里面定义的字符串是可以复用的(也就是说如果在我们创建了一个字符串之后又想要创建一个跟它一模一样的字符串,那么操作系统就不会再进行创建,而是让这两个字符串指针指向同一个位置,复用同一个数据)
3.小练习:
①:键盘录入一个字符串,并且遍历输出其中的每一个字符:
#include
int main() {
printf("请输入一个字符串:");
char str[100];
scanf("%s", &str);
printf("您输入的字符串中的字符分别为:");
char* p = str;
while (1) {
char c = *p;
if (c == '\0')
break;
else
printf("%c ", c);
p++;
}
}
②:定义一个数组存储学生的名字并进行遍历:
#include
int main() {
char names[][100] =
{
"A",
"B",
"C",
"D"
};
int len = sizeof(names) / sizeof(names[0]);
for (int i = 0; i < len; i++) {
char* name = names[i];
printf("%s\n", name);
}
}
使用指针数组的方式;
#include
int main() {
char* names[] =
{
"A",
"B",
"C",
"D"
};
int len = sizeof(names) / sizeof(names[0]);
for (int i = 0; i < len; i++) {
char* name = names[i];
printf("%s\n", name);
}
}
二.字符串中的常用函数
想要使用下方的函数的前提是导入包含这些函数的库的头文件——string.h
1.strlen:
获取字符串的长度
#include
#include
int main() {
char* str = "abc";
int len = strlen(str);
printf("%d", len);
}
注意:使用本方法获取字符串的长度时,是不计算结束标记的('\0')
2.strcat:
拼接两个字符串
#include
#include
int main() {
char str1[] = "abc";
char str2[] = "def";
strcat(str1, str2);
printf("%s", str1);
}
注意:本方法拼接字符串时,是把第二个字符串中全部的内容都拷贝到第一个字符串的末尾,因此我们需要注意两个点——第一个字符串是可以被修改的,并且第一个字符串中剩余的空间足够容纳第二个字符串中的内容
3.strcpy:
复制字符串
#include
#include
int main() {
char str1[] = "abc";
char str2[] = "def";
strcpy(str1, str2);
printf("%s", str1);
}
注意:本方法复制字符串时,是把第二个字符串中全部的内容都复制到第一个字符串中(会覆盖第一个字符串中原有的内容),因此我们需要注意的还是那两个点——第一个字符串是可以被修改的,并且第一个字符串中剩余的空间足够容纳第二个字符串中的内容
4.strcmp:
比较两个字符串
#include
#include
int main() {
char str1[] = "abc";
char str2[] = "def";
int ans = strcmp(str1, str2);
printf("%d", ans);
}
注意:本方法会对两个字符串进行比较,只有完全一样(包括字符串中字符的顺序)时才会返回0,只要有一个不一样都会返回非0的值
5.strlwr:
将字符串变成小写
#include
#include
int main() {
char str1[] = "ABC";
char str2[] = "DEF";
strlwr(str1);
strlwr(str2);
printf("%s\n", str1);
printf("%s\n", str2);
}
6.strupr:
将字符串变成大写
#include
#include
int main() {
char str1[] = "abc";
char str2[] = "def";
strupr(str1);
strupr(str2);
printf("%s\n", str1);
printf("%s\n", str2);
}