字符串
第一种定义
利用字符数组 +双引号的方式定义字符串
char str1[4]="abc";
printf("%s\n",str1);
细节1:
在底层,实际存储的时候,c语言还是会帮我们把字符串"abc"转换成字符数组进行保存,并且在末尾还要再加上'\0‘
{'a','b','c','\0'};
细节2:
数组的长度,要么不写,如果要写的话,记得要把结束标记的空间给预留出来
细节3:
字符数组 +双引号的方式定义字符串,内容是可以发生改变的
第二种定义
利用指针 +双引号的方式定义字符串
char* str2 = "abc";
printf("%s\n",str2);
细节1:
在底层,实际存储的时候,c语言还是会帮我们把字符串"abcd"转换成字符数组进行保存,并且在末尾还要再加上'\0'
{'a','b','c','d','\0‘};
细节2:
利用指针 +双引号的方式定义字符串,会把底层的字符数组放在只读常量区
只读常量区特点:
内容不可以修改的
里面定义的字符串是可以复用的
复用就是在定义时会查找在只读常量区内有没有这个字符串,若有则复用
键盘录入字符串并遍历
#include<stdio.h> int main() { //因为要键盘录入键盘录入,所以不可以用指针定义字符串 char str[100]; //定义一个指针p来接收str的地址 char* p = str; printf("请输入一段字符串(长度小于100):"); scanf("%s",str); printf("录入的字符串为:%s\n",str); //循环判断str内的每一个字符 while(1) { //定义变量c来接收p中的元素 //数组的地址其实就是数组中第一个元素的地址 char c = *p; //当c等于结束符时说明字符串已经遍历完成 if(c == '\0') { //跳出循环 break; } //打印当前元素 printf("%c\n",c); //指针 p 向后移动一个位置,指向下一个字符 p++; } return 0; }
遍历姓名
#include<stdio.h> int main() { //方法一:定义一个二维数组来存放5人的名字 /*char strArr[5][10] = {"张三","李四","王五","马六","徐七"}; int i; for(i=0;i<5;i++) { printf("%s\n",strArr[i]); }*/ //方法二:定义一个指针数组来存放5人的名字 char* p[5] = {"张三","李四","王五","马六","徐七"}; int i; for(i=0;i<5;i++) { printf("%s\n",p[i]); } return 0; }
string常用函数
使用函数需要导入头文件
#include<string.h>
-
strlen:获取字符串的长度
统计长度时不计算结束符,且中文占2字节
-
strcat:拼接两个字符串
细节1:把第二个字符串中全部的内容,拷贝到第一个字符串的未尾,第二个字符串不修改 前提1:第一个字符串是可以被修政的 前提2:第一个字符串中剩余的空间可以容纳拼接的字符串
-
strcpy:复制字符串
细节1:把第二个字符串中全部的内容,拷贝到第一个字符串中,把第一个字符串里面原有的内容给覆盖了 前提1:第一个字符串是可以被修改的 前提2:第一个字符串中空间可以容纳第二个字符串的完整内容
-
strcmp:比较两个字符串
顺序内容完全 一样返回0,不一样返回非0
-
strlwr:将字符串变成小写
只可以修改英文大小写
-
strupr:将字符串变成大写
只可以修改英文大小写
示例代码
#include<stdio.h> #include<string.h> int main() { char* str1 = "abc"; char str2[100] = "Ab你"; char str3[] = {'e','f','g','h','\0'}; strlen计算字符串长度 //int len1 = strlen(str1); //int len2 = strlen(str2); //int len3 = strlen(str3); //printf("%d %d %d\n",len1,len2,len3); strcat拼接字符串 //strcat(str2,str3); //printf("%s\n",str2); //printf("%s\n",str3); strcpy复制字符串 //strcpy(str2,str3); //printf("%s\n",str2); //printf("%s\n",str3); strcmp比较字符串 //int test = strcmp(str2,str3); //printf("%d\n",test); strlwr小写字符串 //strlwr(str2); //printf("%s\n",str2); //strupr大写字符串 strupr(str2); printf("%s\n",str2); return 0; }