作业介绍
学习字符串
string
基本用法
- 定义:
string sstring s(100, 'a');初始化 为 个a。
- 赋值:
s = "hello" - 可以理解为是一个
char类型的数组。 - 输入输出比较方便:
cin >> s, cout << s - 获取字符串长度的函数:
s.size(), s.length() - 字符串自带加法运算:字符串和字符串加,字符串和字符加。
string s = "hello";
string t = "world";
cout << s + t; // helloworld
string s = "hello";
char t = 'w';
cout << s + t; // hellow
遍历字符串
- 通过下标来完成遍历
下标从 开始,到 s.size() - 1
string s;
cin >> s;
int n = s.size();
for (int i = 0; i < n; i++)
{
cout << s[i];
}
常见应用
- 给定一个字符串,将其进行大小写转化。
每一个 s[i] 都是 char
做法:
遍历字符串,对每一个 s[i] 判定,如果是大写就变小写,否则变大写。利用 ASCII 码判断。A = 65,a = 97,0 = 48
for (int i = 0; i < s.size(); i++)
{
if (s[i] >= 65 && s[i] <= 90) // s[i] >= 'A' && s[i] <= 'Z'
{
s[i] += 32;
}
else if (s[i] >= 97 && s[i] <= 122)// s[i] >= 'a' && s[i] <= 'z'
{
s[i] -= 32;
}
}
- 不同的字符串之间支持比较。
支持 >, >=, <=, <, !=, == 这几个运算符。
s = "hello", t = "world"
比较规则:
两个字符串,不论长度,统一靠左对齐,然后一一比较,若 ASCII 码不相同,则 ASCII 码大的字符串大,否则看向下一位。
举例:hel 和 abcd,hel 大
abcd 和 abd,abd 大
abcd 和 abc,abcd 大。
string s, t;
cin >> s >> t;
if (s > t)
{
s 大
}
else if (s < t)
{
t 大
}
else
{
相等
}
- 输入带空格的字符串。
由于 cin 语句遇到空格或回车就自动结束,如果输入的字符串之间有空格,则无法顺利保存。有两种解决方法。
方法一
使用 getline() 函数可以保存空格,例子如下:
string s;
getline(cin, s);
方法二
将输入的字符看作是若干个字符串处理,使用循环结合 cin 语句。通常是将 cin 写至 while 的条件内,由于 cin 结束输入后会传递结束输入的标志,该标志可用于结束 while 循环。
string s;
while (cin >> s)
{
cout << s << endl;
}
在 DEV C++ 运行时,按 ctrl + z 结束输入。
- 在 C++ 中,如果你在
cin之后直接使用getline(cin, s),可能会遇到getline读取不到数据的情况。这通常是因为cin在读取数据时留下了换行符\n在输入缓冲区中,而getline会把这个换行符当作有效输入,导致它直接读取到空字符串。
#include <bits/stdc++.h>
using namespace std;
int main() {
int num;
string str;
cin >> num; // 读取一个整数
getline(cin, str); // 试图读取一行字符串
cout << "num: " << num << endl;
cout << "str: " << str << endl;
return 0;
}
输入:
5
Hello World
输出:
num: 5
str:
你会发现 str 是空的,这是因为 cin >> num 只读取了 5,但 \n 仍然留在了输入缓冲区中,getline 读取这个 \n,导致 str 为空。
所以,在 cin 读取完整数后,使用 cin.ignore() 忽略缓冲区中的 \n:
#include <bits/stdc++.h>
int main() {
int num;
string str;
cin >> num;
cin.ignore(); // 忽略缓冲区中的换行符,也可以使用一次getline(cin, str) 先读取末尾换行符
getline(cin, str); // 现在可以正确读取字符串了
cout << "num: " << num << endl;
cout << "str: " << str << endl;
return 0;
}
输入:
5
Hello World
输出:
num: 5
str: Hello World
题目
认领作业后才可以查看作业内容。
- 状态
- 正在进行…
- 题目
- 20
- 开始时间
- 2025-12-27 0:00
- 截止时间
- 2036-1-24 23:59
- 可延期
- 24 小时