0

次のように ac スタイルの文字列を逆にする関数を作成しました

void reverse1(char* str) {
    char* str_end = strchr(str, 0);
    reverse(str, str_end);
}

この関数を使用して、逆の文字列を出力します

void print(char* str) {
    for (int i=0; i!=sizeof(str); ++i) {
        cout << int(*(str+i)) << '\t';
    }
    cout << endl;
}

反転後、印刷結果は次のようになります。103 110 105 114 116 115 0 0 余分な 0 が 1 つあります。誰かが私を助けてくれることを願っています。どうもありがとうございました!

4

2 に答える 2

2

sizeof(str)は、64 ビット プラットフォームでは 8 になります。したがって、標準出力で 8 つの数値が得られます。

C++ でプログラミングする場合は、std::string を使用するようにしてください。C スタイルの文字列を使用する場合は、出力を次のように記述できます。

void print(char* str) {
    for (int i=0; i<=strlen(str); ++i) {
        cout << int(*(str+i)) << '\t';
    }
    cout << endl;
}

また

void print(char* str) 
{
    do {
        cout << int(*str) << '\t';
    } while (*str++);
    cout << endl;
}
于 2013-01-16T06:29:32.260 に答える
0

@ハーパーが言ったように

C++ でプログラミングする場合は、std::string を使用するようにしてください。

もしそうなら、(私にとって)逆文字列を印刷してすべての文字コードを表示する最も簡単な方法は

std::copy( str.rbegin(), str.rend(), std::ostream_iterator< int >( std::cout, "\t" ) );

また

std::copy( str.rbegin(), str.rend(), std::ostream_iterator< char >( std::cout, "\t" ) );

すべてのキャラクター自体を見る

于 2013-01-16T07:26:20.483 に答える