黑马程序员-C语言回顾-字符串

------Java培训、Android培训、iOS培训、.Net培训、期待与您交流! -------

C语言回顾-字符串

一、字符串的基本概念

字符串是位于双引号中的字符序列。

在内存中以“\0”结束,所占字节比实际多一个。


注意:

1、可以把一个字符常量赋值给一个字符变量,但不能把字符串常量赋值给字符变量。

2、C语言中没有字符串变量,可以用字符数组来存放字符串。


二、字符数组定义

定义和数值型数组相同。

1、一维数组

char  数组名[常量表达式]

例如:char ch[10]

2、二维数组

char 数组名[常量表达式1][常量表达式2]

char arr[3][4]

注意:定义字符数组时,应确保数组长度比字符串长度至少多1,因为要存放”\0” 。


三、字符数组初始化和引用

1、字符数组初始化

1)定义同时进行初始化

  char ch[5] = {‘a’,’b’,’c’,’d’,’e’,’f’};

  char ch[] =  {‘a’,’b’,’c’,’d’,’e’,’f’};

 

2)先定义,后初始化

char ch[3];

ch[0] = ‘a’;

ch[1] = ‘b’;

ch[2] = ‘c’;


2、引用

和普通数组方法相同


3、字符数组的作用

1)保存字符

2)保存字符串


四、以字符串的形式输入和输出

使用格式字符串为“%s”,表示输入、输出的是一个字符串。

1、字符串的输出

%s 从给定的地址开始,输出字符直到遇到 \0 结束。

2、字符串的输入

如果输入的数组长度是100,那么接收的字符串的长度必须小于100,以留出一个字节用来存放字符串结束符’\0’。

对于一个字符数组,如果不做初始化赋值,则必须说明数组长度。

当用scanf函数输入字符串时,字符串中不能含有空格,否则将以空格作为字符串的结束符。


五、字符串结束符使用

1、字符串结束符

在C语言中没有专门的字符串变量,通常用一个字符数组来存放一个字符串。

字符串总以“\0”作为字符串的结束符。

当把一个字符串存入一个数组时,也把结束符’\0’存入数组,并以此作为该字符串是否结束的标志。

有了’\0’标志后,就不必再用字符数组的长度来判断字符串的长度了。

C语言允许用字符串的方式对数组进行初始化赋值。

例如:

char ch[] = {‘a’,’b’,’c’};

注意这种初始化方式后面要手工加上’\0’,否则会出现乱码。

char ch[] = {‘a’,’b’,’c’,’\0’};



2、不使用或者不当使用结束符造成的问题

1)字符数组初始化时没有使用’\0’

会出现乱码,或者输出多余的内容。

2)不当使用结束符

输出的字符串会到’\0’结束,如果不当使用’\0’,会使输出不完整。


六、字符串处理函数

C语言提供了丰富的字符串处理函数,大致分为字符串的输入、输出、合并、修改、比较、转换、复制、搜索几类。

用于输入输出的字符串函数,在使用前要包含头文件“stdio.h”。

使用其他字符串函数则要包含头文件“string.h”。


1、strlen函数

计算字符串长度,不包含’\0’

strlen(数组名)


2、puts函数

字符串输出函数

格式:puts(数组名)

功能:把字符数组中的字符串输出到显示器。

特点:1)可以自动换行。

2)不能格式化输出。


3、gets函数

字符串输入函数

格式:gets(字符数组名)

功能:从标准输入设备键盘上输入一个字符串

gets函数并不以空格作为字符串输入结束的标志,只以回车作为输入结束。


4、strcat函数

字符串连接函数

格式:strcat(字符数组名1,字符数组名2)

功能:把字符数组2中的字符串连接到字符数组1中字符串的后面,并删去字符串1后的字符串结束符’\0’。

返回值:字符数组1的首地址。

注意:字符数组1应定义足够长,否则不能全部装入被连接的字符串。


5、strcpy函数

字符串拷贝函数。

格式:strcpy(字符数组名1,字符数组名2)

功能:把字符数组2中的字符串拷贝到字符数组1中。

注意:

1)字符串结束符’\0’也一同拷贝。

2)字符数组名2也可以是一个字符串常量。

3)字符数组2中的内容会覆盖字符数组1中的内容。

4)字符数组1应足够长,否则不能全部装入所拷贝的字符串。


6、strcmp函数

字符串比较函数

格式:strcmp(字符数组名1,字符数组名2)

也可以比较两个字符串常量,或比较数组和字符串常量。

比较规则:

对两个字符串自左向右逐个字符比较(按ASCII码值的大小比较),知道出现不同的字符或遇到’\0’为止。

如果全部字符相同,则认为相等;

如果出现不相同的字符,则以第一个不相同的字符的比较结果为准。

返回值:

1)字符串1==字符串2,返回0。

2)字符串1>字符串2 ,返回一个正整数。

3)字符串1<字符串2,返回一个负整数。


思考&实现

使用gets函数从键盘输入一个字符串,判断输入的有多少个单词?


/*
 思考&实现
 使用gets()函数从键盘输入一个字符串,统计单词个数并单词首字母大写
 重点:
 用word来标识单词。
 */


#include <stdio.h>

int main(int argc, const char * argv[]) {
    char ch[100];
    int count = 0;
    int word = 0;
    printf("请输入一个字符串:\n");
    gets(ch);
    for (int i = 0; ch[i]!='\0'; i++) {
        if (ch[i]==' ') {
            word=0;
        } else if(word == 0) {
            count++;
            ch[i]=ch[i]-32;
            word=1;
        }
    }
    printf("整理后的字符串是:%s\n",ch);
    printf("单词个数为:%d\n",count);
    return 0;
}


运行结果:

请输入一个字符串:
warning: this program uses gets(), which is unsafe.
i love    china
整理后的字符串是:I Love    China
单词个数为:3
Program ended with exit code: 0


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值