一、类c字符串的表示方法
1、字符数组,数组的最后一位是 '\0',如果没有'\0',只是字符数组,不是字符串。
2、字符指针
二、类c字符串的初始化
1、char array[6] = {'a','b','c','d','e','\0'};
2、char array[6] = "abcde"; 这种字符串被称为字符串常量或者字符串字面值,这种方式隐式的包含了'\0'。
3、const char *array = "bear"; array指针指向字符串的第一个字符
三、类c字符串的其他操作
1、拼接字符串常量:任何两个由空白分分隔的字符串常量都将自动拼接成一个。下面的两个语句是等效的,第一个字符串的'\0'会被第二个字符串中的第一个字符取代。
cout << "I'd give my right arm to be" " a great violinist.\n" ;
cout << "I'd give my right arm to be a great violinist.\n" ;
2、从屏幕或文件中获取字符,组成字符串:
a、一次获取一个字符:
char name[20];
std::cin >> name;
这种方法的细节是 cin 使用空白(空格、制表符、换行符)来确定字符串的结束位置,在获取单词后, cin 将字符串放入到字符数组中,并自动在结尾处添加'\0'。
b、一次读取一行:
cin.getline(array,length);
cin.getline(arr1,len1).getline(arr2,len2);这也可以,cin.getline()的返回值是cin对象。
array是存储字符的数组名,length是读取的字符数,最多读 length-1 个字符,留一位放置'\0'。
getline()在读取指定数目的字符数后或者读到'\n'后停止,将'\n'换成' '。
cin.get(array,length);
与cin.getline()相似,但 cin.get()读到'\n'时不会将'\n'丢弃,反而将它留在输入队列中,那么当再次调用 cin.get()时会出现问题。为解决这个问题,可以用 cin.get() 去吸收 '\n'。
cin.get(arr,len).get();这可行,cin.get(arr,len)的返回值是cin对象。
当getline()和get()读取空行时,将设置失效位,接下来的输入将被打断,可以使用 cin.clear()来清除失效位,恢复输入。
3、字符串复制
a、strcpy(destination,source);这个函数可能会发生字符串覆盖数组后面内存中的内容,尽量不要用。
b、strncpy(destination,source,[其他参数]);可以解决strcpy()的安全性问题。
4、字符串比较
strcmp(addr1,addr2);这个函数接受两个字符串地址作为参数。
if 两个字符串相同,返回 0;
else if 第一个字符串按字母顺序排在第二个字符串前,返回负数值;
else 返回正数值;
5、将字符串作为参数传递给函数
a、参数有三种形式:
char 数组; 字符串常量; char 指针
b、实际上传递的是字符串第一个字符的地址
c、字符串有内置的结束字符,所以不需要提供字符串的长度
d、为避免修改字符串的内容,可以在函数原型中声明为 const char *
e、函数无法返会一个字符串,可以返回字符串的地址