这似乎应该很简单,但我正在努力解决这个问题。我试图以非常具体的方式交换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”版本看起来像带有时间戳的原始文本。
答案 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和]之间。我还必须在右侧交换同一行的i
和1
。