c++字符串
- char数组使用列表赋值时,结尾需要带一个空字符/0
- char数组使用字符串常量赋值时,字符串常量隐含的包含结尾的空字符。
- cout打印字符数组时直到遇到空字符才停止。
- c++输入工具通过键盘输入,将字符串读入到char数组时会自动加上结尾的空字符。
- 使用char数组初始化字符串时通常不指定char数组长度。除非有特殊需要。
- 字符串常量(使用双引号)不能和字符常量(使用单引号)互换。
- 字符串常量例如:"S"表示两个字符‘S‘和‘\0‘
- 实际上字符串常量表示一个地址。表示的是"S"字符串的首地址
- 字符常量‘S‘表示83的另一种写法。
- c++允许拼接字符串字面值。
- sizeof返回整个数组的字节数
- strlen()返回字符串中有多少个字符,不包含空字符\0
- cin根据空白(空格,制表符,换行符)判断是否输入结束。
- cin还有在后面指出高级特性。
- 如果要将整个短语而不仅仅是一个单词作为输入,使用istream中的类如cin提供的成员函数
- getline(),get()
- getline()通过换行符确定行尾,但不保存换行符。在存储字符串时,使用空字符代替换行符。
- cin.getline(name, 20); 表示将一个姓名读入到一个包含20个元素的char数组中。并返回一个cin对象。
- cin.getline(name1, 20).getline(name2, 20);
- getline()还有第3个参数后面讲。
- get()将换行符保存到输入序列中。
- get()用法与getline()相似
- 但是两连续的get()不可以跨过换行符
- 例如
- cin.get(name, 20);
- cin.get(name, 20);
- 使用get()的变体可以跨过换行符
- 无参数的cin.get()表示读取下一个字符。
- cin.get(name, 20);
- cin.get();
- cin.get(name, 20);
- cin.get(name1, 20).get();
string
#include < string >
- string类位于命名空间std中。
- 可以使用下标访问字符。
- 程序将自动调整string对象的大小。
- C++11支持列表初始化。
- 不能将一个字符数组赋给一个字符数组,但可以将一个string对象赋给另一个string对象。
- 重载 + 运算符。
- 在string之前。
- 使用strcpy(char1[], char2[])对字符串进行复制。
- 使用strcat(char1[], char2[])对字符串进行追加。
- 使用字符数组时可能会发生无法存储的错误
- char char1[10] = "house";
- strcat(char1, "of pancakes");如果成功,那么字符串长度超过字符数组长度,将覆盖掉字符数组之后的相邻内存,导致数据被破坏。也可能直接导致程序终止。
- 对应的c函数库提供了strncpy(char1[], char2[], int n)和strncat(char1[], char2[], int n)
- 这两个函数提供了第三个参数表名了目标数组可以接受字符串的最大长度。
- 将输入读取到string对象中
- string str;
- getline(cin, str);
其他形式的字符串字面值
使用前缀
- wchar_t title[] = L"Chief Astrogator";
- char16_t name[] = u"Felonia Ripova";
- char32_t car[] = U"Humber Super Snipe";
- UTF-8字符编码方案
- 根据编码的数字值,字符可能存储为1~4个字节。
- c++使用前缀u8来表示这种类型的字符串字面值。
- 原始字符串(rw)
- 原始字符串中,字符表示的就是自己。
- 例如: \n 表示的不是换行,而是 ?和 n 两个字符。
- 原始字符串使用"(和)"表示定界符。且以R为前缀。
- 例如:cout << R"(yang zi xiong hhh)";
- 但是如果字符串中出现)"也会认为字符串到了结尾。这时c++运行你在"和(之间添加一些字符表示字符串开头。同样结束时也应该使用同样的添加的字符。
- 例如:cout << R"+*(yang zi xiong hhh )+*" << endl;
- 但是空格,左括号,右括号,斜杠和控制字符(制表符和换行符)除外。
- 可以将R和其他形式结合。如Ru,RL,RU。
c++字符串
原文:https://www.cnblogs.com/yangzixiong/p/11960728.html