交换char数组中的元素

时间:2015-09-11 23:11:31

标签: c arrays udp

这似乎应该很简单,但我正在努力解决这个问题。我试图以非常具体的方式交换char数组的2个元素(不想使用指针)。我有一个名为buffer的数组,其中包含一个文本字符串。如果索引是奇数,那么该元素需要与它的“镜像对应”交换(即,如果索引是缓冲区[5],那么它需要与数组末尾的第5个元素交换。我有它的伪代码,但我无法实现它。这是我的破解(它可能是可怕的代码,请注意):

    while(i<strlen(buffer)/2){
        if(i%2 ==1){
            temp = buffer[i];
            buffer[i] = buffer[strlen(buffer)-i-1];
            buffer[strlen(buffer)-i-1] = temp;
        }
        i++;
    }

以下是进一步澄清的伪代码:

for each char resp[x] in the sending buffer resp
    if the index of resp[x] is odd // resp[0] is the first element, hence its index is 1 (i.e., odd) 
        switch the value of resp[x] and resp[len(resp)-x-1];
    endif
end for 

修改

我的问题是,如何交换数组的元素?尝试这种方法并没有像我想要的那样清理我的数组......这是一种解密算法,我试图用它来理顺buffer[]

中的加密文本

EDIT2

这是我得到的截图...第一组易读文本是数组中的原始文本,第二组是混乱的数组,最后一块文本应该是什么“Cleaned Up”版本看起来像带有时间戳的原始文本。

enter image description here

2 个答案:

答案 0 :(得分:1)

将每个位置旋转到一个容纳空间,同时将其相反填充,然后使用容纳空间中的值填充相反的位置。这基本上就是你在做什么。

这是一个可能更容易阅读的变体:

int main(void)
{
    char buffer[] = {"this is a string of characters"};
    char character=0;  //holding space for jumping characters
    int i,len,halfLen;

    len = strlen(buffer);//do this only once
    halfLen = len/2;

    //reverse the characters in string
    for(i=0;i<halfLen;i++)
    {
        character = buffer[i];
        buffer[i] = buffer[len-1 - i];
        buffer[len-1 - i] = character;
    }
    printf(buffer);

    getchar();

    return 0;   
}

答案 1 :(得分:0)

我解决了......原来这是我的一个愚蠢的错字。

while(i<strlen(buffer)/2){
    if(i%2 == 0){
        temp = buffer[i];
        buffer[i] = buffer[strlen(buffer)-i-1];
        buffer[strlen(buffer)-i-1] = temp;
    }
    i++;
}

是我应该拥有的。我的错误来自if块的条件语句应该是if(i%2 == 0)而不是'if(i%2 == 1)'然后我在这一行中输入了错字:

buffer[i] = buffer[strlen(buffer)-i-1];

我错放了strlen()调用的右括号,不知怎的,它被移到了1和]之间。我还必须在右侧交换同一行的i1