读入
string r(n, '0'); // 声明一个长度为n,元素全为'0'的字符串
char s[100];
// 到空格、换行等就会结束
scanf("%s", s);
cin >> s;
// 不受空格限制
char s[100];
fgets(s, 100, stdin); // gets函数在新版C++中被移除了,因为不安全; 可以用fgets代替,但注意fgets不会删除行末的回车字符
cin.getline(s, 100);
// 或者 使用getline()读取一整行。
string s;
getline(cin, s);
gets
函数存在安全隐患,它不能防止缓冲区溢出,如果输入的字符超过了预期,可能会导致程序崩溃或其他安全问题。所以现在推荐使用fgets
代替。
输出
printf("%s\n",s);
cout << s;
// 只能用于char[] s
puts(s);
函数
// 只能计算字符数组,或者s.c_str();返回值的数据类型是size_t,使用前需要int n = strlen(s);
// 如果是字符串s,直接使用s.size()即可返回size_t类型的长度值
// s.size()<=-1永远是true,因为-1会被隐式转换成一个无符号整数(在32位系统中是4294967295,在64位系统中是18446744073709551615)
strlen(s);
// 比较字典序 返回-1 (a < b),0 (a == b),1 (a > b)
strcmp(s1, s2);
// 复制b给a // 将字符串b复制给从a开始的字符数组
strcpy(a, b);
// 计算字符串中某个字符的数量 e.g.空格 count在<algorithm>中
int cnt = count(sentence.begin(), sentence.end(), ' ');
string
cin >> s;
// 使用printf打印string需要使用.c_str()
printf("%s", s.c_str());
puts(s);
cout << s;
s.empty();
// O(1)的
s.size(); // 返回值数据类型是size_t
// 当i始终是非负数时,就不会出现问题(因为两者都是非负的)
s.length();
// 截取字符串中的子串
s.substr(4); // 从下标4开始一直到结束
s.substr(5, 3); // 从下标5开始,3个字符
// to_string(),stoi(),stod(),stof(),stol(),stoll(),stoul(),stoull()
s.earse(p, n); // 删除s中从p开始的n个字符,如果n省略就删到底O(n)
s1.find(s2, pos); // 从pos位置开始,查找成功时返回第一次出现的下标,失败返回string::npos的值(-1)
s1.rfind(s2, pos); // 从pos开始从后向前查找字符串s2中字符串在当前串后边第一次出现的下标
s1.replace(p, len, s2, pos, len); // 将从p开始的len个字符替换为s2从pos开始的len个字符,后两个参数可以省略
s.c_str(); // 返回传统的const char * 类型字符串
s.data(); // 返回一个char * 类型的字符串
/*
当把string对象和字符字面值及字符串字面值混在一条语句中使用时,
必须确保每个加法运算符的两侧的运算对象至少有一个是string
*/
// 遍历 2种方法
// 1.当成字符数组
// 2.
for (char c: s) {
}
for (auto c: s) {
cout << c << endl;
}
for (char &c: s) {
c = 'a';
}
// string之间的比较支持>,<,>=,<=,==,!=等所有比较操作,按字典序进行比较。
// 当字面值与string相加时,字面值和字符都会被转化成string对象,因此直接相加就是将这些字面值串联起来
string s1 = "hello", s2 = "world"; // 在s1和s2中都没有标点符号
string s3 = s1 + ", " + s2 + '\n';
做题时遇到的知识点
#include <sstream>
// ssin 类似 cin
stringstream ssin(s);
while (ssin >> s) {
if (s == a) cout << b << " ";
else cout << s << " ";
}
// sscanf
sscanf(s, "%d%d%s%lf", &a, &b, &c, str);
// 最后一个字符
s.back()
// 取出最后一个字符,原字符串中的最后一个字符会被去掉
s.pop_back()