一、字符数组的定义
定义:用来存放字符数据的数组是字符数组,字符数组中的每个元素(每个元素占一个字节)都是一个字符。
char 数组名 [常量]; 语法上与数值型数组相同。
二、字符数组的初始化
与数值型数组的初始化相同,取其相应字符的ASCII值,
char c[3]={'a','b','c'}; C++中每个单字符用一对单引号‘’括住。
唯一不同:如果是部分赋值,对于数值数组来说,未赋值的元素自动赋为0;而对于字符数组来说,,未赋值的元素自动赋为空字符'\0'.(对应的ASCII码为0)
三、字符数组的引用
与数值数组相同。
void main()
{
char a[3]={'a','b','c'}
for(int i=0;i<3;i++)
cout<<a[i];
}
四、C语言中对字符串的处理(重点)
C语言将字符串作为字符数组来处理。
字符串常量:"CHINA",在计算机中被处理成一个字符型一维数组,数组的最后一个元素为空字符’\0'。长度为5的字符串常量“CHINA"占用6个字节。C语言中约定用'\0'作为字符串的结束标志,它占内存空间,但不计入串长度。有了结束标志'\0'后,程序往往根据它来判断字符串是否结束,而不是根据定义时设定的长度。
1.C语言中对字符串的一般定义方法
一般,C语言将字符串存入一个字符数组,便于后续处理。
可以用字符串的形式为字符数组赋初值。如:
char a[ 11]={"I am a boy "}; 或者 char a[ 11]="I am a boy "; //10个字符占11个字节,末尾自动加'\0'。(空格也是一个字符)
如果数组定义的长度大于字符串的长度,后面均加'\0'。(部分赋值,未赋值元素自动为'\0')
2.字符串与字符数组的一些区别
字符串数组后面多一个'\0'。
字符数组的定义和初始化:char c[ ]={'a','b','c'}; char c[3]={'a','b','c'}; char c[5]={'a','b','c'};
字符串数组的定义和初始化:char a[ ]={"I am a boy "}; char a[ ]="I am a boy "; char a[ 11]="I am a boy ";
注意: char a[ 10]="I am a boy "; //错误,至少需要11个字节的空间。
char a[ 10]='I am a boy '; //错误,字符串必须要用双引号。
3.字符串的输入和输出
cin ,cout,可以用数组名
提醒:cin把空格当作分隔符,故cin只能输入一个单词,不能输入带空格的字符串。
int main() {
char s1[3];
cin >> s1;
cout << s1;
return 0;
}
当输入的一行作为一个字符串送到字符数组,且字符串中有空格时,要使用函数cin.getlline()。
cin.getline(数组名,允许输入的最多字符个数)
int main(){
char s3[80];
cin.getline(s3, 80); //输入
cout <<"s3=" << s3; //输出到'\0'为止
}
当输入行中的字符个数小于80时,将实际输入的字符串(不包括换行符)全部送给s3;当输入行中的字符个数大于80时,只取前面的80个字符送给字符串。
4.多个字符串的一般处理方法
用途:用于处理多个字符串,比如学生名单。
C语言中一般采用二维字符数组来处理。
e.g. char a[2][10]={"zhang san","li si"};
2表示字符串个数,10表示字符串最大长度,{ }表示每行一个字符串。
每个字符串通过数组第一维下标来引用,字符串中的字符用第一维和第二维结合起来引用。
e.g. a[0] "zhang san" a[1] "li si"
a[0][1]: 'z' a[1][1]:'l' a[1][3]='s'
int main()
{char names[3][20];
for(int i=0;i<3;i++)
cin.getline(names[i], 20);
for (int i = 0; i < 3; i++)
cout << i << '\t' << names[i]<<endl;
}
二维字符串:cin.getline(a[i],20);
再次提醒,在语句中字符数组不能用赋值语句整体赋值。(可以定义数组,在开辟空间时赋初值)
5.字符串处理函数
C语言中没有对字符串变量进行赋值,合并,比较等运算符,但提供了许多字符串处理函数,使用这些函数时,必须在使用之前包含头文件#include<string>或者<string.h>。
常用的字符串处理函数:
(1)合并两个字符串:stract(str1,str2)
(2)复制字符串:strcpy(str1,str2)
(3)比较两个字符串:strcmp(str1,str2)
( 4)求字符串长度:strlen(str)
(5)大写字母变小写字母:strlwr(str)
(6)小写字母变大写字母:strupr(str)
#include<iostream>
#include<string>
using namespace std;
int main()
{
char str1[20] = { "I am a" }; //str1的空间要足够容纳新字符串
char str2[10] = { " boy" };
strcat(str1, str2); //strcat(str1, boy);
cout << str1<<endl; //输出I am a boy
cout<<str2; //输出 boy
return 0;
}
#include<iostream>
#include<string>
using namespace std;
int main()
{
char str1[20] = { "I am a" };
char str3[20];
strcpy(str3,str1);
cout<<str3<<endl; //输出I am a
return 0;
}
#include<iostream>
#include<string>
using namespace std;
int main()
{
char str1[20] = { "I am a" };
cout<<strlen(str1)<<endl; //输出6(不包括'\0')
return 0;
}
#include<iostream>
#include<string>
using namespace std;
int main()
{
char str2[10] = { " boy" };
cout<<strupr(str2)<<endl; //输出 BOY
return 0;
}
总结:字符串赋值方法:初始化赋值,或用函数strcpy。
两个字符串的比较函数strcmp(str1,str2),函数对字符串中的逐个两两比较,直至遇到不同的字符或者时'\0'为止。该函数具有返回值,返回值由两个字符串对应的字符相减而得。(相等:0;大于:1;小于:-1.)
#include<iostream>
#include<string>
using namespace std;
int main()
{
char a[]="china";
char b[]="chinb";
char c[]="ahica";
char d[]="chinad";
cout<<strcmp(a,b)<<endl;
cout<<strcmp(c,b)<<endl;
cout<<strcmp(d,c)<<endl;
}
C++处理字符串的方法
C++提供了一种新的数据类型:字符串类型(string类型)在使用方法上和int,float类型一样,可以用来定义变量,这就是字符串变量,用一个名字代表一个字符序列。
实际上,string并不是C++与亚伯本身具有的基本类型,它是在C++标准库中声明的一个字符串类,用这种类可以定义对象。
一、字符串变量的定义和引用
1.定义字符串变量
和其他类型变量一样,字符串变量必须先定义后使用,定义字符串变量要用类名string。
string a; //定义a
string a="china"; //定义a并初始化。
注意:要使用string类的功能,必须要在本文件开头将C++标准库中的string头文件包含进来,即加上:#include<string>。
2.对字符串变量赋值
string a,b;
a="china"; //用常量赋值。
b=a; //用变量赋值。
3.字符串中字符的引用
string a="then";
a[2]='a'; //最后结果than。
4.字符串变量的输入和输出
cin>>a; //注意,这种输入方法,键盘输入不能有空格。
cout<<a;
二、字符串变量的运算
1.字符串复制用赋值
string a,b;
a=b; //字符数组不能这么用。
2.字符串连接用加号
string a,b;
a="C++";
b="Language";
a=a+b; //a="C++Language"。
3.字符串比较直接用关系运算符
= > < != >= <=
三、字符串数组
string name[5]; //定义了一个字符串数组,它包含5个元素。
(1)字符串数组中的每个元素相当于一个字符串变量。
(2)每个字符串元素中只包含字符串本身而不包括空字符。
归纳:C++处理字符串数组有2种方法:(1)C string (2)string类。