C语言学习笔记07——字符与字符串

时间:2021-05-14 01:32:29

鸽了有那么几天,一边是要期末复习了,一边这段时间身体也不是很好老是跑医院(身体健康最重要!)

今天整理一下字符,和字符串。

字符:

       首先提一下字节。字节就是byte。是计算机用于计量存储容量的一种计量单位。数据存储是以“字节”(Byte)为单位,数据传输大多是以"位"(bit,又名“比特”)为单位,一个位就代表一个0或1(即二进制),每8个位(bit,简写为b)组成一个字节(Byte,简写为B),是最小一级的信息单位。通常我们常用的计量单位有B(byte),KB(kilobyte),MB(Megabyte),TB(Terabyte)。他们之间的数量级比均为1024。

字符是指计算机中使用的字母、数字、字和符号,包括:1、2、3、A、B、C、~!·#¥%……*()+等等。在 ASCII 编码中,一个英文字母字符存储需要1个字节。在UTF-8编码中,一个英文字母字符存储需要1个字节,一个汉字字符储存需要3到4个字节。

一般我们现在使用的字符都是对应ASCII码表上的。几个常用的字符对应的整型为,'\0' = 0, '0'  = 48, 'A'  = 65, 'a'  = 97

字符在C语言中都是要加上单引号的 以便于区分是字符还是整型。

字符的输入:1.scanf("%c",&n);   2.getchar();

字符的输出:1.printf("%c",n);      2.putchar();


字符串:

串是零个或多个字符组成的有限序列。串中所包含的字符个数为该串的长度。长度为零的串称为空串,它不包含任何字符。串中所包含的字符个数为该串的长度。长度为零的串称为空串,它不包含任何字符。

C语言中,字符串就是代表着以null字符'\0'为结尾的连续的由字符组成的串。

字符串定义的方式有两种:

1.与数组搭配使用。即:

char str[]={'a','b','c','d'}; //== char str[]={'a','b','c','d','\0'};
char str[]="abcd"; 

上述两种写法都可以,但注意,两种写法虽然我末尾上都没有加'\0',但实际上C的编译器在初始化数组时会自动把'\0'放在字符串末尾。且字符串放入数组时,是可以通过数组下标访问单个字符并修改的。(此时字符串字面量会备份两份,一份放入只读区,一份放入栈区。即相当于拷贝了一份字符串到数组中,原字符串仍然保存在只读区)

2.与指针搭配使用。

char* s="hello";

此时也不用手动加'\0',但注意,这是一个char型的指针,指向了"hello"这个字符串字面量,而这个字面量是存储在只读区的无法修改的,所以,通过指针定义的字符串无法修改。


字符串的输入:

       1.scanf("%s",str)   不能接收空格
       2.char *gets(char *s);   能接收空格,但不能对数据的长度加以限制

       3.char *fgets(char *s, int size, FILE *stream); s为输入字符串要存储的位置 ;size为最多接收多少字符,包括'\0';*stream 输入流stdin(指从键盘输入到缓冲区的东西,一般scanf后缓冲区清理);fgets会接收到'\n'并写入字符串中。


字符串的输出:

        1.printf %s
        2.puts 会自动添加一个换行符  puts("") == printf("\n"); 


字符串的操作函数,在头文件string.h中:

1.strcpy(s1, s2);  复制字符串 s2 到字符串 s1。

2.strcat(s1, s2);  连接字符串 s2 到字符串 s1 的末尾。

3.strlen(s1);  返回字符串 s1 的长度。

4.strcmp(s1, s2);  如果 s1 和 s2 是相同的,则返回 0;如果 s1<s2 则返回小于 0;如果 s1>s2 则返回大于 0。

5.strchr(s1, ch);  返回一个指针,指向字符串 s1 中字符 ch 的第一次出现的位置。

6.strstr(s1, s2);  返回一个指针,指向字符串 s1 中字符串 s2 的第一次出现的位置。


练习:实现get_str函数,能兼并fgets的优点,但是要把'\n'去掉。

char* get_str(char *str, size_t len)
{
	fgets(str,len+1,stdin);
	int i = 0;
	while(str[i]!='\0')
	{
		if(str[i]=='\n')
		{
			str[i]='\0';
			break;
		}
		i++;
	}
}