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

reversing non-zero-initialized chars in array

本文关键字:初始化 字符 数组      更新时间:2023-10-16

我有一个形式的数组

{'1', '3', '2', '', ''}

即-它已初始化为零,并且一些值(从一开始)将具有'' 以外的值

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

{'2', '3', '1', '', ''}

然而,我在思考如何做到这一点时遇到了困难,因为我对数组操作相对陌生。有人能帮忙吗?感谢:)

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] == '') {
            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;
}