美文网首页
(C++实现)笔试题:删除字符串中的数字

(C++实现)笔试题:删除字符串中的数字

作者: JLGao的简书 | 来源:发表于2019-12-07 12:50 被阅读0次

    问题:删除字符串中的含有的数字

    方法1:以字符串中的数字为目标。
    首先从前往后一次扫描每个字符,每遇到一个数字,则将该数字后的所有字符按照相对位置依次向前移动一个位置,覆盖当前这个数字。重复上述步骤,直到扫描完所有字符。时间复杂度为:O(n^2)
    方法2:以字符串中的字符为目标。
    定义两个指针,beforepos和afterpos,beforepos用于扫描字符串中的所有的字符,afterpos用于指向字符串中的字符。首先从前往后一次扫描每个字符,如果遇到的是一个字符,beforepos和afterpos分别指向下一个字符;如果遇到的是一个数字,afterpos位置不动,afterpos继续往后扫描。重复上述步骤,直到扫描完所有字符。时间复杂度为:O(n)

    #include <iostream>
    #include <string>
    using namespace std;
    
    void delnum1(string &str);
    void delnum2(string &str);
    
    int main(){
        string str = "adsn3id045k";
        cout << "str: " << str << endl;
        // delnum1(str);
        delnum2(str);
        cout << "str: " << str << endl;
        return 0;
    }
    
    void delnum1(string &str){
        if(str.size() == 0)
            return;
        int numPos = 0;
        while(str[numPos]){
            if(str[numPos] >= '0' && str[numPos] <= '9'){
                int move = numPos;
                while(str[move]){
                    str[move] = str[move+1];
                    move ++;
                }
                continue;
            }
            numPos ++;
        }
    }
    
    void delnum2(string &str){
        if(str.size() == 0)
            return;
        int beforepos = 0, afterpos = 0;
        while(str[beforepos]){
            if(!(str[beforepos] >= '0' && str[beforepos] <= '9'))
                str[afterpos++] = str[beforepos];
            beforepos ++;
        }
        str = str.substr(0, afterpos);
    }
    

    相关文章

      网友评论

          本文标题:(C++实现)笔试题:删除字符串中的数字

          本文链接:https://www.haomeiwen.com/subject/tftugctx.html