字符串的应用整理(C++)
自己一直对字符串这方面的概念比较模糊,缺少宏观的理解,对它的使用也是每次要用的时候就去查,刷题的时候也是常有字符串类的题目,所以准备整理一下这方面的知识,让自己对这方面有比较深刻的理解和印象。
C++中字符串的使用分为两种:
- C-style string(char数组)
- string类库
一、C-style string
字符串是存储在内存的连续字节中的一系列字符。所以存储在字节中的一系列字符意味着可以将字符串存储到char数组中,其中每个字符都位于自己的数组元素中。
1、简单语法
char a[5] = {'h', 'e', 'l', 'l', 'o'}; // This is not a string.
char b[6] = {'h', 'e', 'l', 'l', 'o', '\0'}; // This is a string.
C-style的字符串有一种特殊的性质:以空字符(null character)结尾,空字符被写作‘\0’,其ASCII码为0.
或者也可以按以下格式写
char a[] = "hello"; // true
char b[5] = "hello"; // false, because \0 is not understand.
char c[6] = "hello"; // true
不确定字符数时可以让计算机自己去识别。
此处注意:字符串常量用双引号,字符常量用单引号。
2、使用标准C语言库函数
需要声明
#include <cstring>
strlen(str) // str字符串的长度
strcat(str1, str2) // 连接str1和str2
strcpy(str1, str2) // 复制str2到str1
strcmp(str1, str2) // 逐字符比较str1和str2
这里列出的就一点点,如果需要参考这个博客https://blog.****.net/u010177286/article/details/50333531
3、字符串的输入
cin输入
cin >> name;
Q:cin如何确定已完成字符串输入呢?
A:由于不能通过键盘输入空字符,因此cin需要用别的方法来确定字符串的结尾位置。cin使用空白(空格、制表符和换行符)来确定字符串的结束位置,这意味着cin在获取字符串数组输入时只能读取一个单词。读取该字符串后,cin将该字符串放到数组中,并在结尾添加空字符。
每次读取一行字符串输入
(1) getline()
getline()函数读取整行,通过回车键输入的换行符来确定输入结尾。
cin.getline(name, 20) //可以规定输入字符,如20即规定输入为19,也可以不规定。
(2) get()
该方法有多种变体,第一种与getline类似。
不能连续两次调用,因为第二次调用时接收的第一个字符就是换行,所以无法存储。
解决方式
// method 1
cin.get(name1, size);
cin.get();
cin.get(name2, size);
// method 2
cin.get(name1, size).get()
//or
cin.getline(name1, size).getine(name2, size)
二、String类
#include <string>
1、初始化及使用
string str1; // create an empty string object
string str2 = "panther"; // create and initialize
string str3 = {"hello"}; // It's ok.
str1 = str 2; // ok, copy(strcpy)
// 不能将一个数组赋值给另一个数组,但可以将一个string对象赋值给另一个string对象。
str3 = str1 + str2; //ok
str1 += "hhh"; // add (like strcat)
len = str1.size(); // like strlen(name) in C-style
2、输入
cin >> str;
getline(cin, str);
还有很多,参考C++ primer p76(标准库类型string),节约时间,直接截图:
需了解更多见C++ primer.