字符串
实例
#include<stdio.h>
#include<string.h>
#define code 100
int main()
{
char str[code+1];
len=strlen(str);//计算字符串长度的函数,包含在<string.h>头文件中
gets(str);//获得字符串长度,即空字符之前的所有字符长度。
for(i=0;i<len;i++)
{
printf("%c",str[i]);//将字符串中的字符逐个输出
}
}
字符串常量
printf("How are you")//用双引号括起来的部分就是字符串常量,系统会自动为其添加空字符 。
字符串都以空字符(ASCLL码值为0)结尾
字符数组的定义与初始化
#define code 100
char str[code+1];
char str[6]={'c','h','n','i','a','\0'};
char str[6]={""china};==char str[6]="china"==char str[]="china"/使用字符串对数组进行初始化
1字符串的输入
字符串的输入有三种,最没特色的就是像输入数组那样用for语句逐个输入for(i=0;i<len;i++){scanf("%c",str[i]);}
gets(str); | scanf("%s",str); |
---|---|
按行读取,以回车换行符作为结束标志,可以输入带空格的字符串,能从缓冲区中读走回车换行符但不把他作为字符串的一部分,而是用空字符将其代替 | 在使用%d、%s输入数字、字符时,在读之前会跳过空格,回车,制表符等空白字符再次遇到这些字符时,系统认为读入结束,所以不能输入带空格的字符串。一般在后面加上scanf("");或者getchar()来清空缓冲区中残留的换行符 |
2字符串的输出
1. 转义字符也会被当作一个字符:\n,\".
2.
(1) 如果字符串太长:printf("how are you\
a key and then press enter")//使用反斜杠连接上下行,但是字符串必须从下一行的起始位置开始写,如果下一行的起始位置是空格那空格也会连接到上一行的字符串里。
(2) printf("how are you"
"a key and then press enter ")//用这种方法就不用必须从起始位置开始写了
3字符串处理函数
所有的字符串处理函数都在<string.h>这个头文件中
- 字符串长度函数
表示 | 功能 |
---|---|
strlen(str); | 计算字符串长度 |
例:
char str[10]="China";
len=strlen(str);
那么len=5;
应用
1控制for的输入输出
for(i=0;i<len;i++)
for(i=0;str[i]!='\0';i++)
- 字符串复制函数
表示 | 功能 |
---|---|
strcpy(目的字符数组,源字符); | 将源字符复制给目的字符数组给 |
当然在复制的时候要保证目的字符数组能够放得下源字符中的字符串
例:
- strcpy(str2,str1);//将str1中的字符完全复制给str2
- strncpy(str2,str1,n);//将str1中的前n个字符复制如str2
- strcpy(str2,strcpy(str1,"hello"));//实现多重复制,同时证明了strcpy(str2,str1);是有返回值的即指向str2的字符指针
- 字符串连接函数
表示 | 功能 |
---|---|
strcat(目的字符串,源字符); | 连接两个字符串 |
例:
1. strcat(str2,str1);//将str1连接到str2后面
如 strcat("hello","world");
输入结果为:helloworld;
2. strncat(str2,str1,n);//将str1前n个字符复制给str2
该函数也有返回值即指向目的字符串的指针
- 字符串比较函数
表示 | 功能 |
---|---|
strcmp(字符串1,字符串2); | 将两个字符串逐个比较直到遇到第一个不同的字符计算其ASCLL码的差值作为该函数返回值 |
例:
1. if(strcmp(str2,str1)==0)//判断str1与str2是否相等
2. if(strcmp(str2,str1)<0)//判断str2是否比str1短
应用:多用于判断
向函数传递字符串
myfunction(char str[])//可以在char前面加上const:用于保护字符数组不被修改