Type: Default 1000ms 256MiB

【Level 1】string

You cannot submit for this problem because the contest is ended. You can click "Open in Problem Set" to view this problem in normal mode.

string

  众所周知,C 语言中的字符串处理较为麻烦与困难。C++ 使用 string 来处理字符串,除非是接口限制,否则应坚持使用 string

  头文件为 <string>

string 和 char

  如果你只是想粗浅地理解 string,那么将其理解为 vector<char> 是一个可接受的近似(如果想要深入了解,就会发现其中的不同,string 实质上是一个 basic_string<char>)。

string 的构造与输入输出

  string 是一个类,与声明变量的格式相同,即 string 字符串名 即可。

string s;

  直接使用 = 就可以对 string 变量进行赋值,例如

string s = "Hello";

  输入输出也非常简单,直接用 cincout 输入输出即可,

  当然,如果你使用 cin 输入 string,将在空白字符(空格、Tab、换行符等)中止,例如

string s;
cin >> s;

  此时输入数据如果是

Hello, World!

  则输入后 s 的值是 Hello,

  值得一提的是,cin 输入时会先略过所有分隔符,从第一个非分隔符开始读取,例如输入为

  to   be or not to be

  时用 cin 连续读入 string

string s;
while (cin >> s) {
    cout << "*" << s << "*" << endl;
}

  将得到

*to*
*be*
*or*
*not*
*to*
*be*

  如果需要输入一整行的字符,意味着我们应该只在换行符时中断输入,这时候就需要使用 getline(),如下所示,就可以得到从当前位置一直到换行符的所有字符,作为一个字符串存在 s 中。

string s;
getline(cin, s);

string 的基本操作

遍历字符

  string 可以直接通过下标访问其中的字符,一般来说,我们先使用 length() 确定字符的个数,再遍历其中的字符,如下所示

string s = "Algo";
for (int i = 0; i < s.length(); ++i) {
    cout << s[i];
}

连接字符串与其它

  如果要连接两个 string,直接使用 + 即可

string a = "Hello, ", b = "World!";
string res = a + b;

  一个 char 也可以直接和 string+ 连接,例如

string a = "Hi";
a += '!';

  int 等类型不能直接跟在 string 后面,但我们可以使用 to_string() 将其转化为 string,例如

string salary_str = "Alice: ";
int salary = 500;
salary_str += to_string(salary);

string 的常用操作

判空

  使用 empty() 判断是否为空

string str;
if (str.empty()) {
    // do something ...
}

截取子串

  使用 substr(size_t pos, size_t count) 获取,得到的是位置在 [pos, pos + count) 的一个子串

string str = "HUST";
cout << str.substr(2, 2) << endl;

  得到的输出结果是 ST

查找

  使用 find(c) 进行字符的查找,字符串同理,例如

void print(string::size_type n) {
    if (string::npos == n) cout << "not found! n == npos\n";
    else cout << "found @ n = " << n << endl;
}

int main() {
    string::size_type n;
    string const s = "This is a string"; 

    n = s.find('a');
    print(n);
    n = s.find('q');
    print(n);
}

  得到输出

found @ n = 8
not found! n == npos

Description

  给定一个由多个单词组成的字符串 SS,将 SS 中的每个单词首字母转换为大写,其余字母转换为小写。

Format

Input

  一行字符串,由若干单词组成,单词之间由空格分隔,不含标点符号。

Output

  一行字符串,每个单词的首字母大写,其他字母小写;每个单词用 一个 空格分隔。

Samples

hello world this  is a cplusplus string  exercise
Hello World This Is A Cplusplus String Exercise
to bE oR  noT to    bE is a quEStion  
To Be Or Not To Be Is A Question

C++入门

Not Attended
Status
Done
Rule
IOI
Problem
16
Start at
2024-9-3 0:00
End at
2024-11-25 8:00
Duration
2000 hour(s)
Host
Partic.
112