反转数组中的非零初始化字符

时间:2015-11-20 00:15:36

标签: c++ arrays reverse

我有一个格式为

的数组
{'1', '3', '2', '\0', '\0'}

即。 - 它已初始化为零,一些数值(从头开始)将具有'\0'以外的值

我想提出一个函数来反转不是'\0'的数组部分。例如,上面的数组将变成:

{'2', '3', '1', '\0', '\0'}

然而,由于我对数组操作相对较新,因此无法绕过如何做到这一点。有人可以帮忙吗?谢谢:))

3 个答案:

答案 0 :(得分:2)

C ++标准库是你的朋友。请注意,这适用于任何类型的数组 - 只需更改类型即可。使用strlen等函数的其他答案仅适用于C字符串。

#include <iostream>
#include <algorithm>
#include <array>

int main()
{
    auto arr = std::array<char, 5>{'1', '3', '2', 0, 0};
    std::reverse(arr.begin(), std::find(arr.begin(), arr.end(), 0));

    for (auto c : arr)
    {
        std::cout << c << std::endl;
    }

    return 0;
}

http://en.cppreference.com/w/cpp/container/array

http://en.cppreference.com/w/cpp/algorithm/find

http://en.cppreference.com/w/cpp/algorithm/reverse

答案 1 :(得分:1)

干杯球员 - 这就是我最终想出来的。好像它有效。

void reverseRelevantParts(char arr[], int size) {

int counter = 0;

    for (int i = 0; i < size; i++) {
        if (arr[i] == '\0') {
            break;
        }
        else {
            counter++;
        }
    }
    int temporary = 0;
        for (int i = 0; i < counter/2; i++) {
            temporary = arr[i];
            arr[i] = arr[counter - i - 1];
            arr[counter - i - 1] = temporary;
        } 
    }

答案 2 :(得分:1)

好的,既然你试过并做出了自己的答案......

char const* reverse(char * arr, int size)
{
    int beg = 0;
    int end = static_cast<int>(strnlen_s(arr, size)) - 1;

    while (beg < end) std::swap(arr[beg++], arr[end--]);

    return arr;
}