1

私は次のコードを持っています:

#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";
}

最初に文字列track2の長さを確認したいのですが、これが24文字以上であるかどうか、24文字目以降の残りの文字が= 0であるかどうか、最後の文字が= 。次に、24番目の文字の先頭からtrack2の終わりまで文字列track2をカットます。その後、?を挿入します 文字列track2の最後の文字とこれを印刷しました。期待される出力は次のとおりです。

Track2={;80221000000100018A1301000000000000000?}

Track2={;80221000000100018A13010}

Track2={;80221000000100018A13010?}

しかし、問題があり、キャラクターを配置したときにifループに入ることができませんか?私の文字列で。私のプログラムはelseループを直接実行します。

誰かが私がこれを解決するのを手伝ってもらえますか?ありがとう

4

1 に答える 1

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

テスト済みで、動作しているようです

于 2012-12-14T10:41:10.410 に答える