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

2019-12-07  本文已影响0人  JLGao的简书

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

方法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);
}
上一篇 下一篇

猜你喜欢

热点阅读