描述
将一个字符串中所有的整数前后加上符号“*”,其他字符保持不变。连续的数字视为一个整数。
数据范围:字符串长度满足
1≤n≤100
输入描述:
输入一个字符串
输出描述:
字符中所有出现的数字前后加上符号“*”,其他字符保持不变
示例1
输入:
Jkdi234klowe90a3
输出:
Jkdi*234*klowe*90*a*3*
解题思路: 使用双指针解法,遍历整个字符串,查看当前字符是否是数字? 1、如果当前字符不是数字,则直接加到结果字符串中,继续下一个字符判断 2、如果当前字符是数字,则继续遍历后续字符,直至不是数字字符为止,记录连续数字的起止为止[i,j),然后在[i,j]前后加上*,然后将i = j; 具体的C++实现代码如下:
#include <cctype>
#include <iostream>
//#include <string>
#include <bits/stdc++.h>
using namespace std;
// 双指针解法
string AddStartsBeforeAndAfterDigital(const std::string &s)
{
string res;
// 遍历字符串
for (int i = 0; i < s.size(); ) {
int j = i;
// 当前字符是数字
if (isdigit(s[j])) {
// 找到最后一个数字(连续数字)
while (isdigit(s[j]) && j < s.size()) {
j++;
}
// 在连续数字前后加上*
res += "*" + s.substr(i, j - i) + "*";
// 记录最后一个数字的下一个字符
i = j;
} else {
// 如果当前字符不是数字,则直接加上
res += s[j];
i++;
}
}
return res;
}
int main() {
string s;
while (cin >> s) { // 注意 while 处理多个 case
cout << AddStartsBeforeAndAfterDigital(s) << endl;
}
}