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,不知道是什么原因。希望可以有人帮帮我。非常感谢!

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

正如@harper 所说

当你用 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 回答