2012-12-14 80 views
1

在字符串中刪除一些字符我有以下代碼:如何削減或用C++

#include <iostream> 
using namespace std; 
#include <string.h> 

int main(){ 

string track2; 
string Track2; 
string end_character("?"); 
Track2={";80221000000100018A1301000000000000000?"}; 
track2=Track2; 

cout<<"Track2={"<<Track2<<"}\n"; 

    if((track2.length()>=24) && (track2.find_first_not_of('0', 24) ==string::npos)){ 
    track2.erase (track2.begin()+24, track2.end()); 
    cout<<"\nTrack2={"<<track2<<"}\n"; 
    Track2=track2 + end_character; 

    cout<<"\nTrack2={"<<Track2<<"}\n"; 
} 
    else 
    cout<<"Track2 has not more than 24 characters.\n"; 
} 

我首先要檢查字符串的長度磁軌2,如果這是大於或等於24字符,那麼如果字符的其餘部分在第24個字符= 0之後,並且最後一個字符= 。然後,我將在第24個字符的開頭處切割字符串track2,直到track2結束。之後,我會插入在字符串track2的末尾輸入字符並打印此字符。 這裏是預期的輸出:

Track2={;80221000000100018A1301000000000000000?} 

Track2={;80221000000100018A13010} 

Track2={;80221000000100018A13010?} 

但我有一個問題,我上無法進入我如果循環,當我把人物在我的字符串中。我的程序直接執行其他的循環。

任何人都可以幫我解決這個問題嗎? 感謝

+1

我敢打賭,如果您將代碼重新格式化爲可讀格式,您會很快發現錯誤。 –

+0

「如果第24個字符之後的字符的其餘部分= 0並且最後一個字符=?」 - 他們不可能都是真的......如果其餘的都是'0',怎麼可能成爲一個問號? –

回答

2

怎麼是這樣的:

if (Track2.length() > 24) 
{ 
    auto question_mark_pos = Track2.find_first_not_of('0', 24); 

    // If there is a character after the zeros AND 
    // if that character is last AND 
    // if that character is a question mark 
    if (question_mark_pos != std::string::npos && 
     question_mark_pos == Track2.length() - 1 && 
     Track2[question_mark_pos] == '?') 
    { 
     // Get the first 24 characters of the string 
     Track2 = Track2.substr(0, 24); 

     // And append the special end character 
     Track2 += end_character; 
    } 
} 

測試,似乎工作,here

+0

Hello Joachim,我認爲在** question_mark_pos **的聲明中,它缺少關鍵字** auto **之後的類型。不是嗎? –

+1

@FrankyN。它是新的C++ 11標準的一部分,使用'auto'來定義變量會使編譯器猜測類型。如果它不適合你使用,例如'std :: string :: size_type'而不是'auto'。 –

+1

或'std :: size_t'。 –