王道机试 第四章 字符串 4.2 字符串处理
例题4.1 特殊乘法(清华大学复试上机题)
- 解题思路:
本题数据范围大于 1 0 9 10^9 109,可用string类型接收较大的整形数。
int类型只能表示到 1 0 9 10^9 109,而long long 可以表示到 1 0 18 10^{18} 1018
所以一般当两个数据范围都为 1 1 1~ 1 0 9 10^9 109的数相加时,其和sum要定义为long long类型,防止数据溢出。
C++代码如下:
#include <iostream>
#include <cstdio>
#include <string>
#include <algorithm>
#include <cstring>
using namespace std;
int main()
{
string s1, s2;
cin >> s1 >> s2;
int n = s1.size(), m = s2.size();
long long sum = 0;
for (int i = 0; i < n; i++){
for (int j = 0; j < m; j++){
sum += (long long)(s1[i] - '0') * (long long)(s2[j] - '0');
}
}
cout << sum << endl;
return 0;
}
例题4.2 密码翻译(北京大学复试上机题)
- 解题思路:
本题的关键在于如何读取一行字符(字符串间有空格,不能直接cin >> string)
- C++读取一行字符(包含空格)的方法
读取一行字符(字符串间有空格,不能直接cin >> string)
- 使用
getline(cin, str, '结束符')
其中, - str为std::string类型,可包含空格;
- 结束符代表每行的终止标志(读到哪个字符停止),一般默认为回车符’\n’。如果默认,则可使用
getline(cin, str)
简化输入。
本题的C++代码如下:
#include <iostream>
#include <cstring>
#include <string>
#include <cstdio>