目录
1,什么是字符串常量
1-1,字符串常量的定义
字符串常量在C语言中通常以字符数组形式储存,以'\0'作为结束(即以转义字符\0来表示终止符NUL)。这里要注意'\0'的存在会让字符串常量的长度多出一位。
1-2,字符串常量的初始化
字符串常量的定义有两种方法:字符数组和指针。
字符串常量在C语言中的本质就是字符数组,但是内容和长度在初始化时就已经固定了,不可更改。利用字符数组初始化字符串常量的方法如下。
char array[10] = {'H','e','l','l','o'};
char array[] = {'H','e','l','l','o'};
char array[] = {"Hello"};
char array[] = "Hello";
其中第一行数组长度为10,后三行长度为6,初始化时及后面调用和更改值的时候注意不能越界。
第二种方法,即利用指针,其实质是用指针储存字符串常量中第1个字符的地址,例如:
char *array = "Hello";
2,字符串的读入输出
2.1输入
也有两种方法,分别为格式字符串%c和%s逐字符/整体输入输出。例如:
char array[100]=""
for(int i=0;i<100;i++)
scanff("%c",&array[i]);
char *array;
for(int i=0;i<100;i++)
scanf("%c",array++);
逐个字符的读入不仅代码繁琐,运算时间也很长,同时还要对字符串的函数先行进行确定,所以我们常用的是格式控制字符%s整体进行输入,如:
char array[100];
scanf("%s",array);
scanf语句读入字符串的特点是读取到空格处,若要整行读入我们可以用gets,例如:
char array[100];
gets(array);
gets() 函数的读取会持续到接受到换行符或EOF时停止,其中换行符不作为读取串的内容并被转换为‘\0’,以此来结束字符串。
2.2输出
同样的,输出方式也有多种,下面列举常见的几种。
#include<stdio.h>
int main()
{
char array[] = "Hello",*p=array;
int i=0;
while(array[i]!='\0')
printf("%c",array[i++]);//字符数组逐字符输出
printf("\n");
while(*p!='\0')
printf("%c",*p++);//指针逐字符输出
printf("\n");
printf("%s\n",array);//printf函数整体输出
puts(array);//puts函数整体输出
printf("\n");
return 0;
}
注意:整体输出的时候注意字符串最后一位是'\0'。
运行结果如下:
3,字符串处理
3.1字符串处理的常用函数
包含在系统头文件<string.h>中的函数有:
(资源来自 C 标准库 – <string.h> | 菜鸟教程 (runoob.com)
下面选取几个常用函数进行举例:
3.2 strcmp() 函数
strcmp() 函数是string compare(字符串比较)的缩写,用于比较两个字符串并根据比较结果返回整数。基本形式为strcmp(str1,str2),若str1=str2,则返回零;若str1<str2,则返回负数;若str1>str2,则返回正数。(来源于百度百科φ(≧ω≦*)♪
下面举几(yi)个例子:
#include<stdio.h>
#include<string.h>
using namespace std;
int main(){
char a1[]="Jii",a2[]="Jin";
if(strcmp(a1,a2)>0)
puts(a1);
else
puts(a2);
return 0;
}
结果会是什么呢?根据ASCII码我们可以知道字符串a1,a2的前两位相同,第三位'i'<'n',所以输出结果不出所料就是"Jin"。
3.3strlen() 函数
strlen() 所作的是一个计数器的工作,它从内存的某个位置(可以是字符串开头,中间某个位置,甚至是某个不确定的内存区域)开始扫描,直到碰到第一个字符串结束符'\0'为止,然后返回计数器值(长度不包含'\0')。
简单来说,它最常用的的功能就是计算一个字符串的长度。例:
#include<stdio.h>
#include<string.h>
int main()
{
char a[1000];
int len;
gets(a);
len=strlen(a);
for(int i=0;i<len;i++){
if(a[i]==' ')
continue;
printf("%c",a[i]);
}
return 0;
}
这是一个去除字符串中空格的简单程序,运行结果如下:
3.4strcpy() 函数
以字符串src,dest为例,strcpy() 函数的作用是把src所指向的字符串复制到dest。需要注意如果目标数组dest不够大,而源字符串src的长度又太长,可能会造成数据溢出的情况。
#include<stdio.h>
#include<string.h>
int main()
{
char src[40];
char dest[100];
strcpy(src,"Hello");
strcpy(dest,src);
printf("%s\n",dest);
return(0);
}
输出结果为"Hello"。
3.4strcat() 函数
strcat() 函数常用来将两个字符串连接起来(中间不包含空格)。同时也要注意连接后数据溢出的问题)例:
#include <stdio.h>
#include <string.h>
int main()
{
char a1[20]="Jini";
char a2[20]="Taimei";
strcat(a1,a2);
printf("%s",a1);
return 0;
}
输出结果为"JinniTaimei"。
3.5strtok() 函数
strtok() 函数可将字符串array分解为一组字符串,a为分隔符(a可以是字符也可以是字符串)。利用一下上面的一段代码,我们可以得到:
#include <string.h>
#include <stdio.h>
int main(){
char array[100],a[2]=" ",*p;
gets(array);
p=strtok(array,a);
while(p!=NULL){
printf("%s\n",p);
p=strtok(NULL,a);
}
return 0;
}
这段代码同样可以去除空格,并且能得到以空格为分割的子字符串,运行测试:
今天的笔记就写到这里吧(绝不是偷懒),欢迎大家来纠错哦!(ノ*・ω・)ノ