C++ 在数组中反转非零初始化字符

C++ 在数组中反转非零初始化字符,c++,arrays,reverse,C++,Arrays,Reverse,我有一个数组,它的形式是 {'1', '3', '2', '\0', '\0'} i、 e.-它已初始化为零,并且一些值(从一开始)将具有除'\0' 我想用一个函数来反转数组中不是'\0'的部分。例如,上面的数组将变成: {'2', '3', '1', '\0', '\0'} 然而,由于我对数组操作还比较陌生,所以我在思考如何做这件事时遇到了困难。有人能帮忙吗?感谢:) < P> C++标准库是你的朋友。请注意,这将适用于任何类型的数组-只需更改类型即可。其他使用strlen等函数的答案只适

我有一个数组,它的形式是

{'1', '3', '2', '\0', '\0'}
i、 e.-它已初始化为零,并且一些值(从一开始)将具有除
'\0'

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

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

然而,由于我对数组操作还比较陌生,所以我在思考如何做这件事时遇到了困难。有人能帮忙吗?感谢:)

< P> 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;
}
#包括
#包括


< P> 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;
}
#包括
#包括


伙计们,干杯,这是我最后想到的。看起来好像有用

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;
        } 
    }
void reverseerelevantparts(字符arr[],整数大小){
int计数器=0;
对于(int i=0;i
伙计们,干杯!以下是我最后想到的。看起来好像有用

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;
        } 
    }
void reverseerelevantparts(字符arr[],整数大小){
int计数器=0;
对于(int i=0;i
好的,现在您已经尝试并给出了自己的答案

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;
}
char const*reverse(char*arr,int size)
{
int=0;
int end=静态铸件(标准长度(arr,尺寸))-1;
而(beg
好的,现在您已经尝试并给出了自己的答案

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;
}
char const*reverse(char*arr,int size)
{
int=0;
int end=静态铸件(标准长度(arr,尺寸))-1;
而(beg
请展示一些解决问题的尝试,我们不只是为您编写。这显然是家庭作业,如果你不努力,你永远也学不到。我的意思是,这是家庭作业问题的一部分,但绝对不是应该很难的部分。。。我试过几次,但我只能想出令人尴尬的错误。我会立即将我的最新尝试编辑到q中,在书中、网页上或任何地方找到一行文本。左手食指指向起点,右手指向终点当你看到它的时候…给它编码。
std::reverse(数组,数组+strlen(数组))
@Barmar-添加了一个答案。请展示一些解决问题的尝试,我们不仅仅是为你写。这显然是家庭作业,如果你不努力,你永远也学不到。我的意思是,这是家庭作业问题的一部分,但绝对不是应该很难的部分。。。我试过几次,但我只能想出令人尴尬的错误。我会立即将我的最新尝试编辑到q中,在书中、网页上或任何地方找到一行文本。左手食指指向起点,右手指向终点当你看到它……代码。<代码> STD::Read(数组,数组+ StLLEN(数组))< /Cord> @ Barmar -添加了一个答案。请参见我的C++(而不是C)版本,嘿,开发EnWMW的答案。我确信我的答案是C++。请你解释一下为什么不是?C++的C++ C++(因为C++主要是C的超集),但是C++有更好的方法来做这些事情。请看我的C++(而不是C)版本,嘿,开发语言——我确信我的答案是C++。请你解释一下为什么不是?我对这一切都很陌生,你的代码在技术上是有效的C++(因为C++主要是C的超集),但是C++有更好的方法来做这些事情。使用反向并不真正锻炼数组的知识,或者真正教他们任何东西。因此,虽然它能完成指定的作业规格,但我非常怀疑它能否达到预期目标。@CrazyEddie,这就是OP需要做作业的原因:)他们可能可以复制和粘贴你的答案,但我的答案却不能。使用reverse并不能真正锻炼数组的知识,也不能真正传授数组的任何知识他们。因此,虽然它将完成指定的作业规格,但我非常怀疑它是否能实现预期目标。@CrazyEddie这就是OP需要做作业的原因:)他们可能可以复制和粘贴你的答案,但我的答案不会。