前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >华为机试HJ96 表示数字

华为机试HJ96 表示数字

作者头像
ccf19881030
发布2023-02-26 16:34:46
2860
发布2023-02-26 16:34:46
举报
文章被收录于专栏:ccf19881030的博客ccf19881030的博客

华为机试HJ96 表示数字

题目描述:

代码语言:javascript
复制
描述
将一个字符串中所有的整数前后加上符号“*”,其他字符保持不变。连续的数字视为一个整数。

数据范围:字符串长度满足 
1≤n≤100 
输入描述:
输入一个字符串

输出描述:
字符中所有出现的数字前后加上符号“*”,其他字符保持不变

示例1
输入:
Jkdi234klowe90a3

输出:
Jkdi*234*klowe*90*a*3*

双指针解法

解题思路: 使用双指针解法,遍历整个字符串,查看当前字符是否是数字? 1、如果当前字符不是数字,则直接加到结果字符串中,继续下一个字符判断 2、如果当前字符是数字,则继续遍历后续字符,直至不是数字字符为止,记录连续数字的起止为止[i,j),然后在[i,j]前后加上*,然后将i = j; 具体的C++实现代码如下:

代码语言:javascript
复制
#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;
    }
}
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2023-02-25,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 华为机试HJ96 表示数字
    • 题目描述:
      • 双指针解法
      领券
      问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档