2012-12-14 47 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'。 –