1

我知道有很多像我这样的问题,但阅读几个并没有帮助我。可能是因为我是编程新手,并且很难使用指针。

作为练习,我试图在 C++ 中创建一个函数来反转输入的字符串。这是我的功能:

char* reverse(const char* t)
{
    int j, k;
    char* aString = new char[100];

    for(j=0, k=strlen(t)-1; j < strlen(t); j++, k--)
    {
        aString[j]=t[k];
    }

    aString[j+1]='\0';

    return aString;
}

但是,输入根本没有反转。我究竟做错了什么?

4

2 回答 2

0

在 C++ 中,您有一个更好、更清洁、更安全、更容易和更易读的选项 - std::string.

这是一个reverse()返回 reversed的函数的简单示例std::string

void swap(string& str, int index1, int index2) {

    char temp = str[index1];
    str[index1] = str[index2];
    str[index2] = temp;

}

string reverse(string str) {

    int size = str.size();

    for (int i = 0; i < size / 2; i++) 
        swap (str, i, size - i - 1);

    return str;

}
于 2013-08-16T01:50:25.597 回答
0

工作正常,对风格和更好的行为进行了一些细微的修改:

#include <iostream>
#include <cstring>

char* reverse(const char* t);

int main() {
    const char* mystring = "reverse me";
    char* revstring = reverse(mystring);

    std::cout << "Before reversing: " << mystring << std::endl
              << "After reversing: " << revstring << std::endl;

    delete[] revstring;
    return 0;
}

char* reverse(const char* t) {
    size_t j;
    int k;
    char* aString = new char[100];

    for(j = 0, k = std::strlen(t) - 1; j < std::strlen(t); j++, k--) {
        aString[j] = t[k];
    }

    aString[j] = '\0';

    return aString;
}

正如其他人所说,这作为一项学术练习很好,但如果可以避免的话,最好不要在 C++ 中使用 C 字符串,最好是strlen()跳出循环。

于 2013-08-16T02:03:37.473 回答