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

reversing non-zero-initialized chars in array

我有一个形式为

的数组
{'1', '3', '2', '[=10=]', '[=10=]'}

即- 它已被零初始化,一些值(从头开始)将具有 '[=12=]'

以外的值

我想想出一个函数来反转数组中不是 '[=12=]' 的部分。例如,上面的数组将变成:

{'2', '3', '1', '[=11=]', '[=11=]'}

但是,由于我对数组操作还比较陌生,因此我无法思考如何执行此操作。有人可以帮忙吗?谢谢:)

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

干杯伙计们 - 这就是我最终想出的。好像有用。

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

int counter = 0;

    for (int i = 0; i < size; i++) {
        if (arr[i] == '[=10=]') {
            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;
        } 
    }

好的,既然您已经尝试并做出了自己的回答...

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;
}