2011-12-06 40 views
1

我有一個需要,我需要在像所需的格式從字符串中提取的數:串操作 - 需要一種更好的方法

  • 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; 
    
    } 
    

    有沒有更好的方法做同樣的事情?

  • +5

    在何種意義上 「更好的」? –

    +0

    @david ...我需要在少量代碼中執行此操作,因爲我必須在代碼中多次執行此操作。此外,我不確定性能! – Vijay

    +0

    更少?我認爲你需要更多的性能..在這種情況下,你可以去C風格的解析 – Arunmu

    回答

    1

    我想,如下一個簡單的函數將做的工作

    注: - 這不是一個完整的程序。只是一個流程......它會一次解析這個字符串而不是3次,就像你的情況一樣。我絕對希望有更好的C++風格的方法,並期待相同的。 (char * str){

    foo(char * str){

    int state = 0;

    int len = strlen(str);

    爲(ⅰ= LEN-1; I> = 0;我++){

    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 
    } 
    

    }

    }

    相關問題