字符串操作 - 需要更好的方法

时间:2011-12-06 05:12:49

标签: c++

我需要从需要的格式中提取字符串中的数字,如:

  • F001 - →100
  • F100 - →1
  • 2030 - > 302
  • 0203 - > 3020
  • 2031 - > 1302

所以上面的操作是:

  • 删除任何f字符(如果存在)
  • 反转字符串
  • 从字符串中删除前导零

我编写了一个在c ++中运行良好的代码:

int main(int argc,char* argv[])
{

string str1(argv[argc-1]);


reverse(str1.begin(),str1.end());
str1.erase(remove(str1.begin(),str1.end(),'f'),str1.end());
str1.erase(0,str1.find_first_not_of('0',0));

cout <<str1<<endl;

return 0;

}

有没有更好的方法做同样的事情?

1 个答案:

答案 0 :(得分:1)

我猜,一个简单的功能如下所示

注意: - 这不是一个完整的程序。只是一个流程......它会将字符串解析一次,而不是像你的情况那样解析3次。我绝对希望有更好的C ++风格方法,并期待相同。

foo(char * str){

int state = 0;

int len = strlen(str);

for(i = len-1; i&gt; = 0; i ++){

if(state==0 && str[i]!='0') { //Ignore trailing zeros
    state=1;
}
else if(stare==1) {
    if(str[i]=='f')
        break;
    //Reverse logic here, just store the char in a heap as it comes which will be returned after the for finishes
}  

}

}