1.字符数组str[ ]
字符数组与普通数组一样,都是数组,只不过储存的是字符,而且C和C++都为它提供了很多函数。
1.初始化
(1) 字符数组可以逐个赋值,类似于 char c[10]; c[0]='I' c[1]='M' 一直像后面赋值,就是将10 个元素分别赋值给c[0]~c[9],
也可以用c[10]={' S '.....'E' };的方法赋值。
(2) 用字符串常量来初始化 char str[ ]={"I am happy"}; 也可以也成char str[ ]="I am happy";
注:如果是刚接触C++的请注意单引号与双引号的区别。
2.字符数组的赋值和引用
比如a和b都是相同长度和类型的字符数组,我们用 “ a=b ”将b赋值给a是错误的。但是 a[0]=b[0]是正确的。
3.字符串及其结束标志
在我们之前了解到了字符数组中,比如用一个一维数组 char str[12]={' I ',' ',' a ',' m ',' ',' h ',' a ',' p ',' p ',' y ' };我们可以看到,空格和字母算起来一共是10个字符。但是我们创建的是一个长度为12的字符数组,那么最后两个位置系统会怎么办呢? 那就是用‘\0’自动填补空字符。
我们的小标题是字符串的结束标志,那么可以猜到‘\0’就是我们的字符串结束标志了。也就是遇到‘\0’就代表字符串到此结束,由它前面的字符组成有效字符串。我们往往可以不需要知道字符串的长度而依靠‘\0’来判断字符串是否结束了。
注:‘\0’代表ASCII码为0的字符,是一个不能够显示的字符。
4.字符串的输入和输出
(1)对于字符数组,我们可以用for循环逐个输入和输出。
(2)整个字符串输入输出:
char str[20] ;
cin>>str;
cout<<str;
注:在执行cout时,str代表第一个元素也就是str[0]的地址,执行“cout<<str” 代表是从str所指向的第一个元素开始输出,直到遇见'\0'为止。输入时不包括'\0'(系统会自动在你输入完毕按enter时在后面的单元里面加)。
5.字符串处理函数对字符串进行操作
头文件为string 和string.h.
(1).字符串连接函数 strcat(char[ ],const char[ ])
char str1[30]="People's Pepublic of ";
char str2[ ]="China";
cout<<strcat(str1,str2);
输出:
People's Republic of China
(2).字符串复制函数strcpy(char[ ],const char[ ])
strcpy将第二个字符数组中的字符复制到第一个字符数组中,并将第一个覆盖。
char str1[10],str2[ ]="China";
strcpy(str1,str2);
注:在函数中第一个参数是数组名,第二个可以是字符串常量,如:
strcpy(str1,"hello");
也可以用strcpy(str1,str2,num); num 代表数字,是将str2的前num个字符复制到str1中去,再在后面加一个‘\0’.
之前有提到不能用str1=str2直接赋值,现在就能用这个函数赋值了。
(3).字符串比较函数strcmp(const char[ ],const char[ ])
下面的写法都是合法的:
strcmp(str1,str2);
strcmp("China","Korea");
strcmp(str1,"Beijing");
因为只参加比较而不改变内容,所以都加const声明。
比较规则为两个字符串从左到右依次比较(按ASCII码比较大小),直到遇见不同的字符,就以这个字符比较的结果为准,如果没有不同的字符,则返回0.如果str1大于str2,则返回正整数,如果小于返回负整数。(与赋值类似,不可以用str1>str2这种表达方法,因为这代表两个地址而你想比较的是内容。)
(4).字符串长度函数strlen(const char [ ]);
这个函数测试字符串的实际长度,不包括'\0'在内。
char str[10]="happy";
cout<<strlen(str);
输出的结果为5(实际长度)。