代码随想录刷题Day22

发布于:2025-08-02 ⋅ 阅读:(15) ⋅ 点赞:(0)

替换数字

这道题比较简单,遇到字母就copy到新的字符数组,如果是遇到数字,就在新字符数组中加入number的字符串。代码如下:

#include<stdio.h>
#include<ctype.h>
#include<string.h>
#define Max 1000000
int main(){
    char res[6*Max];
    char s[Max];
    scanf("%s",s);
    int k = 0;
    for(int i = 0;i<strlen(s);i++){
        if(islower(s[i])){  //如果是小写字母,直接copy过去
            res[k++] = s[i];
        }
        else if(isdigit(s[i])){ //如果是数字的话,把数字设置为number字符串
            res[k++] = 'n';
            res[k++] = 'u';
            res[k++] = 'm';
            res[k++] = 'b';
            res[k++] = 'e';
            res[k++] = 'r';
        }
    }
    printf("%s",res);
    return 0;
}

我这个做法是常规的,申请一个新数组来存放替换后的结果。但如果想要原地修改的话,这时候对数字的修改就得从后往前进行。

反转字符串中的单词

这道题的重点,我觉得是如何以空格为划分界线,把单词这样一个区域划分出来。大致思路参照代码的注释,以及对于代码的划分思路参照下图:

代码如下:

class Solution {
public:
    string reverseWords(string s) {
        char res[10000];
        int pr = 0; //用于记录res数组的遍历

        int end = s.size()-1;
        int begin = s.size()-1; //用于记录每个单词的起始位置和结束位置
        bool finding = false;      //用于作为现在是否处于锁定单词区域的一个信号标志

        for(int p = s.size()-1;p>=0;p--){
            if(s[p]==' ' && finding){  //在finding为true的情况下,遇到空格说明单词划分结束,可以锁定单词的范围begin-end
                    begin = p+1;
                    for(int i = begin;i<=end;i++){
                        res[pr++]=s[i];
                    }
                    res[pr++]=' ';
                    finding = false;
            }

            if(s[p]!=' '&&finding ==false){ //空格结束,遇到非空字符,表示单词划分开始
                finding = true;
                end = p;
            }

            if(p==0&&finding == true){  //如果p已经遍历到0,但是单词划分还没有主动结束,则强行结束
                begin = 0;
                for(int i = begin;i<=end;i++){
                        res[pr++]=s[i];
                    }
                res[pr++]=' ';
            }
        }
        res[--pr]=NULL; //统一去除字符串尾部的多余空格
        return string(res);
    }
};

更省事的方法是使用string.h中的关于字符串处理的split函数,直接以空格作为分隔符返回划分后的第一个首字母,这样迭代提取单词,然后把单词倒序排列。

这道题目在代码随想录中推荐使用的是,原地单词逆转,这里暂时先不看了😜


网站公告

今日签到

点亮在社区的每一天
去签到