180
社区成员




这次我们讨论一下字符串的处理,不过在这之前我们先分析一下什么是字符
我们知道char类型是用于存储字符的,下面我们看几个案例
char c = 1; //这个赋值语句是成立的,但是输出结果是空
char c = "1"; //才能让你真正的输出 1,但是这个char的值却不是1
//所以存入字符串需要写成第二种形式
//但是
char c = "12";
//是不允许的
//输出如下
printf("%c",c);
//读入
scanf("%c", &c);
这些字符的实际存入值是ASCII表的映射,如果想要知道确切的值可以去查看ASCII表,例如 1 在ASCII表中的值为 31
定义:把字符连起来就是字符串
存储容器:数组
具体操作如下:
//定义
char s[] = "abcd";
//输出
printf("%s", s);
//实际上s这个数组是下面的情况
//下标 0 1 2 3 4
//数值 a b c d \0
//其中的第五位'\0'是字符串的终结符主要用于判断字符串是否结束
//其应用: 主要是在遍历字符串中
int i = 0;
while(s[i++] != '\0');
2.2.1 输入:
scanf和gets函数都是处理字符串的一个重要函数,两者存在明显的差异,不要混淆
区别:scanf函数读到空格就会停止,而gets函数则需要读到回车才会结束
例如:
输入: 1 2 3 4 //scanf() void myScanf(){ char s[10]; scanf("%s",&s); prinf("%s",s); // 输出: 1 } void myGets(){ char s[10]; gets(s); prinf("%s",s); // 输出: 1 2 3 4 }
还有几个需要注意的点:
空格是scanf的终止符,如果你用while循环去读 1 2 3 4, 输出的结果会是1234,空格是不会被读入的
gets中的回车也是这个情况
所以不要乱用 getchar()
getchar的使用后面再介绍
2.2.2 字符串长度
其中也包括了两种函数,手写自己算的方法就不展示了,那是数组的内容
其分别是strlen和sizeof两个函数,下面我们来分析一下
//strlen()函数 //其主要用于计算字符串的长度,无法计算普通数组 //因为其是发现'\0'后退出返回计数值 char str[] = "Hello World!"; int len = strlen(str); printf("%d\r\n",len); //12 //sizeof()函数 //这个函数是会计入'\0'的 char str[] = "Hello World!"; int len = sizeof(str); printf("%d\r\n",len); //13 //这个函数不止这一个用法,它还可以计算数据类型的大小,在今后链表的学习也会再次看见 //计算数据类型: sizeof(int)
2.2.3 字符串大小写转换
使用函数包括 tolower() 和 toupper()
这两个函数就是字面意思,你们英语应该都比我好可以看懂
介绍一种写法,另一种换个函数就好了
char str[] = "Hello World!"; printf("转换前:%s\r\n", str); //Hello World! for (int i = 0; i < strlen(str); i++) //也可以写 //for (int i = 0; str[i] != '\0'; i++) str[i] = toupper(str[i]); printf("转换后:%s\r\n", str); //Hello World!
只有字符可以转换,1234没有大小写,所以不会变化,但是应该是可以的,你们试试
但是空格不会转换说明没什么问题,空格也是有ASCII码的
2.2.4 字符串转数字
主要作用就是把char数组转换成int类型或者double类型
不是说 '1' 转换成 31那种
是'101' 转换成 101
主要函数为atoi(),atof()
//没什么好说明的,直接用 //atoi()函数 char str[] = "1024"; int x = atoi(str); printf("%d", x); //atof()函数 char str[] = "3.1415926"; double f = atof(str); printf("%f", f); //默认好像是输出 位
2.2.5 字符串比较
使用函数为 strcmp()
主要应用:比较字符串大小,就不用自己for循环遍历了
//返回值: //左边大:正数 //右边大:负数 //相等:0 char s1[] = "abcdE"; char s2[] = "abcdF"; int res = strcmp(s1, s2); printf("%d\r\n", res);
2.2.6 字符串的复制
使用的函数为 strcpy()
主要应用:需要使用两个字符串的时候,因为读入没那么方便,所以这样复制比较方便
//传入参数 //第一个:需要赋值的字符串数组 //第二个:想要得到的字符串数组 char s1[] = "Hello"; char s2[10]; strcpy(s2, s1); printf("s2:%s",s2);
2.2.7 字符串的拼接
使用的函数为:strcat()
这个函数使用的比较频繁
//传入参数 //第一个:需要赋值的字符串数组 //第二个:拼接的字符串数组 char s1[20] = "Hello"; char s2[10] = " world!"; strcat(s1, s2); printf("%s", s1);
以上就是所有比较频繁使用的字符串操作函数,都需要记住哦。其他如果遇到了也可以百度一下
因为本次博客内容涉及比较广所以没有例题,大家写到的时候可以翻出来看
番外篇
getchar()函数
这个函数的除了处理多余的字符,其他时候不要使用
例如
输入: 1 2 ab 代码: int n,m; scanf("%d %d",&n, &m); getchar(); //如果没有这个getchar()读入的数据就是回车 char s[10]; gets(s);