我们需要对由小写字母组成的密信进行解析,解析规则如下:
.。题目保证字符串长度不超过100,且输出不为空。由于操作只涉及字符的判断和变换,非常适合用简单遍历解决。
我们可以按照解析规则逐步处理:
'.'。c - 'a' + 'A'。由于字符串长度很小(≤100),暴力遍历完全可行。
isVowel(c),判断字符 c 是否为 'a'、'e'、'i'、'o'、'u' 之一。result。遍历原字符串的每个字符 c,若 !isVowel(c) 则执行:
result.push_back('.');
result.push_back(c - 'a' + 'A');
result。关键点:
string 的 += 运算符或 push_back 方法添加字符,效率足够。设输入字符串长度为 ( n ),其中 ( n \le 100 )。我们只遍历了一遍字符串,每次判断和添加字符都是 ( O(1) ) 时间。总时间复杂度为 ( O(n) )。空间复杂度也为 ( O(n) ),用于存储结果字符串。
cpp1#include <iostream> 2#include <string> 3using namespace std; 4 5// 判断字符是否为元音字母 6bool isVowel(char c) { 7 return c == 'a' || c == 'e' || c == 'i' || c == 'o' || c == 'u'; 8} 9 10int main() { 11 string s; 12 cin >> s; // 读入密信 13 14 string result = ""; // 用于存放解析后的结果 15 for (char c : s) { 16 if (!isVowel(c)) { // 若不是元音字母 17 result += '.'; // 添加点号 18 result += (c - 'a' + 'A'); // 转换成大写并添加 19 } 20 } 21 22 cout << result << endl; // 输出解析后的字符串 23 return 0; 24}
isVowel 函数:通过逐一比较判断当前字符是否为五个元音字母之一,若是则返回 true。main 函数:
cin >> s; 读入整行字符串(不包含空格)。for (char c : s) 遍历每个字符。result 中先加入 '.',再加入转换后的大写形式。c - 'a' 得到的是该字母在字母表中的偏移量(0~25),加上 'A' 后即得到对应的大写字母。result。本题是简单的字符串处理题,考察对字符操作和条件判断的掌握。类似的题目可能要求忽略其他特定的字符,或将转换规则应用于不同语种字母,但核心思路都是 遍历 + 条件判断 + 构造新字符串。在处理更长的字符串时,可以考虑使用 stringstream 或预先分配足够空间,以减少多次内存重分配的开销。此处由于长度很小,直接使用 + 拼接即可。