C ++成对反向char数组

时间:2014-12-12 16:20:19

标签: c++ hex reverse

如何成对反转十六进制数字(字符数组)。我有A1B1C1,我想将它反转为C1B1A1。我一直试图弄清楚它几天,但我没有看到任何人处理配对。

2 个答案:

答案 0 :(得分:2)

我根据上面的评论提出了这个代码。它似乎适用于我的简短测试。

这个想法很简单,一个用于反转整个字符串的初始传递和用于交换相邻字母对的第二个传递。

void reverse_by_pairs(std::string &s)
{
    if (s.size() & 1) return; // reject odd-length strings

    std::reverse(begin(s), end(s));

    for (int i = 0; i + 1 < s.size(); i += 2) {
        std::swap(s[i], s[i + 1]);
    }
}

经过一些修改后,您可以反转任意类型的对:

template <typename T>
void reverse_by_pairs(T *seq, size_t size)
{
    if (size & 1) return; // reject odd-length sequence

    std::reverse(seq, seq + size);

    for (size_t i = 0; i + 1 < size; i += 2) {
        using std::swap;
        swap(seq[i], seq[i + 1]);
    }
}

void reverse_by_pairs(std::string &s)
{
    if (s.size() > 1) {
        reverse_by_pairs(&s[0], s.size());
    }
}

void reverse_by_pairs(char *s)
{
    reverse_by_pairs(s, strlen(s));
}

答案 1 :(得分:0)

如你想要一组字符,我已经完成了以下工作:

1)假设该字符串为A1B2C3

2)您正在使用旧编译器,因为在新编译器中可以使用std::string类而不是创建一个字符数组。

代码如下:

#include <iostream>
#include <conio>
void main() {
   char a[] = "A1B2C3";
   int n = 6;
   for (int y = 0; y<n ; y++) {
        for (int x = 0 ; a[x]<a[x+2] ; x++) {
            char t = a[x];
            a[x] = a[x+2];
            a[x+2]=t;
        }
   }
   cout<<a;
   getch();
}