在 C++ 中使用 Cstrings 反转字符串

Reverse a string using Cstrings in C++

我正在尝试获取用户输入并将其反转以供稍后比较。看起来我正朝着正确的方向前进,但我似乎无法弄清楚为什么我的方法只有 return 一个字母。当我 cout reversedInput 时,它应该 return 整个 Cstring 反转。

#include <cstring>
#include <iostream>
#include <stdio.h>
using namespace std;
void reverseString(char arr[100]);
char reversedInput[100];


int main() {

    char input[100];


    cout<<"Please enter a string"<<endl;
    cin.getline(input, 100);
    cout<<"You entered "<<input<<endl;

    reverseString(input);
    cout<<"The reverse is "<<reversedInput<<endl;

    system("pause");
    return 0;
}

void reverseString (char arr[]) {
    int i;
    int j = strlen(arr) - 1;
    char temp;

    for (i = 0; i < j; i++, j--) {
        temp = arr[j];
        //        arr[j];
        reversedInput[i] = temp;
    }

}

如果你想在全局数组 reversedInput 中以相反的方式存储数组 arr 的内容,那么一种方法是这样,尽管 Why Global Variables Should Be Avoided When Unnecessary?

void reverseString (char arr[]) {
        for (size_t i = 0, j = strlen(arr); j-- > 0 ; i++) { /* change the condition from i<j to j>=0*/
                reversedInput[i] = arr[j]; /* filling in global array in reverse order */
        }
        reversedInput[i] = '[=10=]'; /* terminate with [=10=] */
}

根本问题是 i < j 在你的条件中。当您下降源字符串时,j 递减而 i 递增,最终在字符串的中途相遇,留下一半未被复制。

void reverseString(const char arr[]) 
{
    size_t len = strlen(arr);
    for (size_t i = 0; len-- > 0; ++i)
        reversedInput[i] = arr[len];
}

注意,避免计算 strlen(arr)-1 是有意的。考虑将 when/if 传递给此函数的 empty 字符串会变成什么。 (提示:无符号类型合法下溢到它们的最大值)。

也就是说,这里有很多潜在的担忧,特别是超过 reversedInput 的大小的可能性,依赖于它是静态的(因此零填充所以一个自由终止符),以及副作用首先修改全局(应该是输出参数)。但核心问题是条件之一。

假设输入字符串是 "nitendra" 并且您想要反转它。您可以反转字符串,只需将第一个字符与最后一个字符交换,然后将第二个字符与倒数第二个字符交换,依此类推。直到(字符串长度)/2.

#include <iostream>
    #include <algorithm>
    #include <stdio.h>
    using namespace std;
    void reverseString(char arr[100]);
    char reversedInput[100];


    int main() {

        char input[100];


        cout<<"Please enter a string"<<endl;
        cin.getline(input, 100);
        cout<<"You entered "<<input<<endl;

        reverseString(input);
        cout<<"The reverse is "<<input<<endl;

        system("pause");
        return 0;
    }

    void reverseString (char* arr)
    {
        size_t len = std::strlen(arr);

        for(size_t i=0;i<(size_t)(len/2);++i)
        {
            std::swap(arr[i], arr[len-i-1]);
        }
    }