#CPP14. 【Level 1】string

【Level 1】string

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