题目解析:替换字符串中的特定字符
题目描述
给定一个字符串 S,编写一个函数,将字符串中的小写字母 'a' 替换为 "%100",并返回替换后的字符串。
例如:
- 对于字符串
"abcdwa",所有'a'字符会被替换为"%100",最终结果为"%100bcdw%100"。 - 对于字符串
"banana",所有'a'字符会被替换为"%100",最终结果为"b%100n%100n%100"。 - 对于字符串
"apple",所有'a'字符会被替换为"%100",最终结果为"%100pple"。
思路分析
- 遍历字符串:我们需要遍历给定的字符串
S,检查每个字符是否为'a'。 - 字符替换:如果当前字符是
'a',则将其替换为"%100";如果不是,则保留原字符。 - 构建新字符串:我们需要一个额外的字符串来存储替换后的结果。在遍历过程中,将替换后的字符逐个添加到新字符串中。
- 返回结果:遍历完成后,返回新构建的字符串作为最终结果。
图解
由于这是一个文字解析,无法直接展示图解,但我们可以通过以下步骤在脑海中构建图像:
-
原始字符串:例如
"abcdwa"。 -
遍历过程:从左到右逐个字符检查。
- 第一个字符
'a',替换为"%100"。 - 第二个字符
'b',保留。 - 第三个字符
'c',保留。 - 第四个字符
'd',保留。 - 第五个字符
'w',保留。 - 第六个字符
'a',替换为"%100"。
- 第一个字符
-
新字符串:将替换后的字符组合起来,形成
"%100bcdw%100"。
代码详解
下面是实现上述思路的 C++ 代码:
cpp复制代码
#include <iostream>
#include <string>
std::string solution(const std::string& s) {
std::string result; // 用于存储替换后的结果
for (char c : s) { // 遍历输入字符串 s
if (c == 'a') { // 检查当前字符是否为 'a'
result += "%100"; // 如果是,则添加 "%100" 到结果字符串中
} else {
result += c; // 如果不是,则保留原字符到结果字符串中
}
}
return result; // 返回替换后的结果字符串
}
int main() {
// 测试用例
std::cout << (solution("abcdwa") == "%100bcdw%100") << std::endl; // 应输出 1 (true)
std::cout << (solution("banana") == "b%100n%100n%100") << std::endl; // 应输出 1 (true)
std::cout << (solution("apple") == "%100pple") << std::endl; // 应输出 1 (true)
return 0;
}
代码详解(续)
-
函数定义:
std::string solution(const std::string& s):定义了一个名为solution的函数,它接受一个常量引用类型的字符串s作为参数,并返回一个字符串类型的结果。
-
变量声明:
std::string result;:在函数内部声明了一个字符串变量result,用于存储替换后的结果。
-
遍历字符串:
for (char c : s):使用范围 for 循环遍历输入字符串s中的每个字符,并将其赋值给变量c。
-
字符替换:
-
if (c == 'a'):检查当前字符c是否为'a'。result += "%100";:如果是,则将字符串"%100"添加到结果字符串result中。
-
else:如果当前字符c不是'a'。result += c;:则将原字符c添加到结果字符串result中。
-
-
返回结果:
return result;:遍历完成后,返回结果字符串result。
-
主函数:
- 在
main函数中,我们调用了solution函数,并使用std::cout输出了比较结果。由于solution函数返回的是字符串,而==运算符用于比较两个字符串是否相等,因此std::cout会输出1(表示true)或0(表示false)。
- 在
总结
这个问题是一个简单的字符串替换问题,它考察了对字符串的遍历和字符替换的基本操作。通过遍历输入字符串,检查每个字符是否为 'a',并根据检查结果进行替换或保留操作,我们可以轻松地解决这个问题。最后,将替换后的结果字符串返回即可。