我有一个格式为
的数组{'1', '3', '2', '\0', '\0'}
即。 - 它已初始化为零,一些数值(从头开始)将具有'\0'
以外的值
我想提出一个函数来反转不是'\0'
的数组部分。例如,上面的数组将变成:
{'2', '3', '1', '\0', '\0'}
然而,由于我对数组操作相对较新,因此无法绕过如何做到这一点。有人可以帮忙吗?谢谢:))
答案 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
答案 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;
}