字符串的特点与处理方法

星落化尘 2023-11-12 21:17:00
加精

这次我们讨论一下字符串的处理,不过在这之前我们先分析一下什么是字符

1. 字符

我们知道char类型是用于存储字符的,下面我们看几个案例

char c = 1;    //这个赋值语句是成立的,但是输出结果是空
char c = "1";     //才能让你真正的输出 1,但是这个char的值却不是1
//所以存入字符串需要写成第二种形式
//但是
char c = "12";
//是不允许的

//输出如下
printf("%c",c);

//读入
scanf("%c", &c);

这些字符的实际存入值是ASCII表的映射,如果想要知道确切的值可以去查看ASCII表,例如 1 在ASCII表中的值为 31

2. 字符串

2.1 基础定义和操作

定义:把字符连起来就是字符串

存储容器:数组

具体操作如下:

//定义
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 进阶操作

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);

 

...全文
148 回复 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
回复
切换为时间正序
请发表友善的回复…
发表回复

211

社区成员

发帖
与我相关
我的任务
社区描述
程序设计基础课程教学群
c语言c++ 高校 福建省·厦门市
社区管理员
  • xmzq001
  • 鹿饮涧鸣
  • jiangxiaoju
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

请加入学习社区的软件23级同学修改社区昵称为学号+姓名,以便登记作业提交情况。

试试用AI创作助手写篇文章吧