(1)问题
54. 替换数字(第八期模拟笔试) (kamacoder.com)
题目描述
给定一个字符串 s,它包含小写字母和数字字符,请编写一个函数,将字符串中的字母字符保持不变,而将每个数字字符替换为number。 例如,对于输入字符串 "a1b2c3",函数应该将其转换为 "anumberbnumbercnumber"。
输入描述
输入一个字符串 s,s 仅包含小写字母和数字字符。
输出描述
打印一个新的字符串,其中每个数字字符都被替换为了number
输入示例
a1b2c3
输出示例
anumberbnumbercnumber
(2)思路
找到输入字符串的数字个数,然后创建一个新的大小的字符串,然后从两个字符串的最后开始往前填入字符,遇到数字,就替换成number。最后输出结果字符串即可。
(3)解题流程
1.创建输入字符串,替换的字符串和一个统计数字出现次数的变量。
2.输入字符串,遍历,记录数字出现的次数。
3.创建新的字符串。大小为原来的字符串大小再加上5*数字出现的次数。(这个需要自己计算下)
4.定义两个变量遍历两个字符串。
5.判断字符串是否为数字,如果是就往新的字符串存入number。如果不是就直接复制到新的字符串。
6.最后输入新的字符串。
代码实现:
#include<iostream>
using namespace std;
int main()
{
string str1;
string number = "number";
int numsize = 0;
cin>>str1;
for(char s:str1)
{
if(s>='0'&&s<='9') numsize++;
}
string str2(str1.size()+5*numsize,'0');
int i=str1.size()-1;
int j=str2.size()-1;
while(i>=0)
{
if(str1[i]>='0'&&str1[i]<='9')
{
for(int k=number.size()-1;k>=0;k--)
str2[j--] = number[k];
}
else{
str2[j--]=str1[i];
}
i--;
}
cout<<str2<<endl;
return 0;
}
代码还有优化的空间,例如能不能直接使用一个字符串完成替换。大家可以自己想一想。只需要略微修改上面的代码就可以实现。