一、字符串的读写
1.printf 与puts
printf都很熟悉,还有一个输出字符串的函数puts(),其使用方法如下。值得注意的时它输出完了之后会自动换行。
puts(str);
2.scanf与gets
使用scanf读取字符串如下:(注意不需要取地址符&了,因为str是数组名,编译器把它传递给函数时会把他当做指针处理。)
scanf("%s",str);
使用scanf 读取字符串时无法读入空字符,换行符也会导致scanf的停止读入(空格符和制表符也会有此一样的效果)
为了一次读入一整行输入就可以使用gets函数。gets函数不会跳过空白符的读入,直到找到换行符就才停止。
由于无法指定长度,因此这些读入数组时是不安全的,scanf可以使用%ns 来指出输入最多字符,而gets天生就不安全(可以使用fgets函数)
3.fgets函数
# include <stdio.h>
char *fgets(char *s, int size, FILE *stream);
是函数原型,返回字符数组,有三个参数,第一个表示存入数组的首地址,第二个表示读入字符串长度,第三个表示何种输入流读取,如标准输入流stdin(这里不多讲解)
二、访问字符串中的字符
1.数组下标访问
2.指针自增自减访问
三、使用C语言的字符串库
# include <string.h>头中
1.strcpy函数(字符串复制)
原型:
char *strcpy(char *s1,const char *s2);
把字符串s2复制给s1(把s2中的字符复制到指向s1的数组中),但是是有危险的,strcpy函数不能检查str2所指向的字符串的大小是否真的合适str1指向的数组。
还有一种函数strncpy()有第三个参数用于限制所复制的字符数可以这样使用
strncpy(str1,str2,sizeof(str1) - 1); str1[sizeof(str1) - 1] = '\0';
2.strlen函数(求字符串长度)
原型:
size_t strlen (const char *s);
size_t 类型是一种无符号整数类型,除非是处理极长的字符串,我们就可以把它当做整数处理。即返回类型理解为整数。
strlen函数返回字符串s的长度:s中第一个空字符之前的字符个数(不包括空字符)
3.strcat函数(字符串拼接)
原型:
char *strcat(char *s1,const char *2);
strcat函数把字符串s2的内容追加到字符串s1的末尾,并且返回字符串s1(指向字符串的指针),当然如果str1的长度不够容纳str2指向的字符串中的字符,也是具有危险性的。
同样也有strncat函数,具有第三个参数来限制所复制的字符数。
strncat(str1,str2,sizeof(str1) - strlen(str1) -1);
计算str1中剩余的空间,然后减去1给空字符留下空间。
4.strcmp函数
strcmp(字符串比较)
int strcmp(const char *s1,const char *s2);
s1小于s2 返回小于0的值
s1等于s2 返回0
s1大于s2 返回大于0的值
其实可以理解为做差了,s1-s2