问题:删除字符串中的含有的数字
方法1:以字符串中的数字为目标。
首先从前往后一次扫描每个字符,每遇到一个数字,则将该数字后的所有字符按照相对位置依次向前移动一个位置,覆盖当前这个数字。重复上述步骤,直到扫描完所有字符。时间复杂度为:。
方法2:以字符串中的字符为目标。
定义两个指针,beforepos和afterpos,beforepos用于扫描字符串中的所有的字符,afterpos用于指向字符串中的字符。首先从前往后一次扫描每个字符,如果遇到的是一个字符,beforepos和afterpos分别指向下一个字符;如果遇到的是一个数字,afterpos位置不动,afterpos继续往后扫描。重复上述步骤,直到扫描完所有字符。时间复杂度为:。
#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);
}
网友评论