反转数组中的非零初始化字符
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
干杯伙计们 - 这就是我最终想出的。好像有用。
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;
}
我有一个形式为
的数组{'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
干杯伙计们 - 这就是我最终想出的。好像有用。
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;
}