1.特征
以‘\0’(ASCII码即为0)结尾,否则不是字符串,因此字符串数组的大小应严格大于字符数目
2.输入及赋值
字符数组不能直接赋值,替代方法如下
- 初始化时赋值:可以直接在赋值时使用字符串,例如:
int main() { char a[100] = { "hello world" }; cout << a; system("pause"); return 0; }
- cin>>:从可以读取的位置开始(因此cin留下的回车空格等不会影响下一个cin读取)读到空格,回车,tab停止,并把其留在输入序列(这可能导致下一个输入失效!)在后面加cin.ignore()或者cin.get();
- cin.get():单参数(或为空)时读取单个字符,包括\n,但只能用来读取char,返回值为是否读取成功
- 多参数:cin.get(char*s, streamsize n, char delim) 最后一个参数可省去,则默认为\n,但是,一旦写入delim,将不会在\n 停止,而char delim也会像回车一样保留在输入队列中
- cin.getline(char*s, streamsize n, char delim):delim的规则同上,区别是getline会将delim从输入队列中删除
- strcpy ( char * destination, const char * source );source可以为一个字符串,字符\0也会存入destination,函数返回值为destination
3.相关函数
- 头文件:<cstring>
- strlen(char*s),返回值为字符数组中第一个\0之前(不包括\0)的字符个数
- strcpy,同上
- strcmp(char*s1, char*s2),返回0表示两字符数组第一个\0之前每个字符相同,若有不同,>0表示s1中的值较大,<0表示s2中较大
- strcat(char*s1, char*s2),返回s1的地址,从s1第一个\0开始将s2拼接到s1
- strchr(char*s, int character),返回第一个出现的character的地址,若换为角标需与s地址相减,返回值也可以作为第一个参数再次使用
- strrchr,同上,找到的是最后一个
4.string
头文件<string>
可以直接赋值,也可以用string[ ]确定某一个字符