作业介绍

学习字符串

string

基本用法

  • 定义:string s
    • string s(100, 'a'); 初始化 ss100100a
  • 赋值: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

遍历字符串

  • 通过下标来完成遍历

下标从 00 开始,到 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 = 65a = 970 = 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 码大的字符串大,否则看向下一位。

举例:helabcdhel

abcdabdabd

abcdabcabcd 大。

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 小时