Arrays C语言中的反向数组?
嗨,伙计们,我似乎不能反转我的数组,我的语法看起来不错,我的逻辑看起来不错,但FOR函数只是没有迭代。此函数用于反转数组,主要是字符串。n=字符串的长度Arrays C语言中的反向数组?,arrays,string,Arrays,String,嗨,伙计们,我似乎不能反转我的数组,我的语法看起来不错,我的逻辑看起来不错,但FOR函数只是没有迭代。此函数用于反转数组,主要是字符串。n=字符串的长度 #include <stdio.h> #include <string.h> void reverse(char, int); int main() { char a[100]; gets(a); reverse(a, strlen(a)-1); printf("%s\n",a);
#include <stdio.h>
#include <string.h>
void reverse(char, int);
int main()
{
char a[100];
gets(a);
reverse(a, strlen(a)-1);
printf("%s\n",a);
getchar();
getchar();
getchar();
return 0;
}
void reverse(char ar[], int n)
{
char c;
int i = 0;
printf("n = %d" , n);
for ( i = 0; i >= n ; i++){
c = ar[i];
ar[i] = ar[n];
ar[n] = c;
printf("Processed");
n--;}
}
/*
if (begin >= n)
return;
c = *(x+begin);
*(x+begin) = *(x+n);
*(x+n) = c;
offs = x++;
printf("Begin = %d , n = %d, offs = %p \n", begin, n, offs);
reverse(x, ++begin, --n); */
#包括
#包括
无效反向(字符,整数);
int main()
{
chara[100];
获得(a);
反面(a,斯特伦(a)-1);
printf(“%s\n”,a);
getchar();
getchar();
getchar();
返回0;
}
无效反向(字符ar[],整数n)
{
字符c;
int i=0;
printf(“n=%d”,n);
对于(i=0;i>=n;i++){
c=ar[i];
ar[i]=ar[n];
ar[n]=c;
printf(“已处理”);
n--;}
}
/*
如果(开始>=n)
返回;
c=*(x+begin);
*(x+begin)=*(x+n);
*(x+n)=c;
offs=x++;
printf(“开始=%d,n=%d,关闭=%p\n”,开始,n,关闭);
反向(x,++开始,--n)*/
循环变量的条件是错误的,它应该测试小于,而不是大于(因为您似乎想从0到n
)
i>=n
应该是i
循环变量的条件是错误的,它应该测试小于,而不是大于(因为您似乎想从0到n
)
i>=n
应该是i
以及@H2CO3已经指出的逻辑错误,您的函数原型是错误的-更改:
void reverse(char, int);
致:
请注意,如果您在编译时启用了警告(例如,
gcc-Wall…
),编译器将指出此类错误,从而为您节省大量时间和精力。以及@H2CO3已经指出的逻辑错误,您的函数原型是错误的-更改:
void reverse(char, int);
致:
请注意,如果您在编译时启用了警告(例如,gcc-Wall…
),编译器将指出此类错误,从而为您节省大量时间和精力。这是O(N)性能。实际上,您只执行N/2次迭代
void reverseArray(char[] arr) {
int start = 0, end = strlen(arr) - 1, tempVal;
for (; start < end; start++, end--) {
//swap start & end location
tempVal = arr[end];
arr[end] = arr[start];
arr[start] = tempVal;
}
}
void reversearlay(char[]arr){
int start=0,end=strlen(arr)-1,tempVal;
对于(;开始<结束;开始++,结束--){
//交换起始和结束位置
tempVal=arr[end];
arr[end]=arr[start];
arr[start]=tempVal;
}
}
这是O(N)性能。实际上,您只执行N/2次迭代
void reverseArray(char[] arr) {
int start = 0, end = strlen(arr) - 1, tempVal;
for (; start < end; start++, end--) {
//swap start & end location
tempVal = arr[end];
arr[end] = arr[start];
arr[start] = tempVal;
}
}
void reversearlay(char[]arr){
int start=0,end=strlen(arr)-1,tempVal;
对于(;开始<结束;开始++,结束--){
//交换起始和结束位置
tempVal=arr[end];
arr[end]=arr[start];
arr[start]=tempVal;
}
}
我添加了一个答案,但是。。。当代码不工作时,为什么不在调试器中运行代码?这应该是询问堆栈溢出之前要做的第一件事。此外,使用适当的压痕。很抱歉,目前的款式是。。。呃,糟透了。我已经添加了一个答案,但是。。。当代码不工作时,为什么不在调试器中运行代码?这应该是询问堆栈溢出之前要做的第一件事。此外,使用适当的压痕。很抱歉,目前的款式是。。。呃,糟透了。@EricJablow如果n>0,它甚至不会进入OP的for循环体。@Matt Eric不是在说这个。我的答案中有一个错误,我现在通过删除它来修复。在for语句中可以使用两个变量:for(size\t lower=0,upper=n;lower
。意图就更清晰了。@EricJablow如果n>0,它甚至不会进入OP的for循环体。@Matt Eric不是在说这个。我的答案中有一个错误,我现在通过删除它来修复。在for语句中可以使用两个变量:for(size\t lower=0,upper=n;lower
。意图就更清晰了。耶,那是另一个。耶,那是另一个。