给定一个数字列表和一个正整数 k,我必须一次反转列表的元素,k 项。如果元素个数不是k的倍数,那么最后剩下的项应该保持原样:
例如:输入:1,2,3,4,5;2
输出:2,1,4,3,5
我使用了一个非常简单的概念,我在两端取两个指针 a&b 进行交换,并在整个循环中迭代它们。
我遇到了分段错误。我应该如何纠正它?
我的代码:
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
void reverse(char str[],int p)
{
int i,j,k,a,b;
int len=strlen(str);
printf("%d\n",len);
a=0;
b=p-1;
while(1)
{
i=a;j=b;
while(j>i)
{
k=str[i];
str[i]=str[j];
str[j]=k;
i++;
j--;
}
a=a+p;
b=b+p;
if(b>=len)
break;
}
for(i=0;i<len-1;i++)
printf("%c,",str[i]);
if(i==len-1)
printf("%c",str[i]);
printf("\n");
}
int main(int argc,char* argv[])
{
if(argc!=2)
{
printf("Wrong number of arguments\n");
exit(0);
}
FILE *fp;
fp=fopen(argv[1],"r");
if(fp==NULL)
{
printf("File can't be openend:\n");
exit(0);
}
char c;
c=fgetc(fp);
char str[100];
memset(str,'0',100);
int k,i;
while(1)
{
k=0;
while(c!=';')
{
if(c!=',')
{
str[k]=c;
k++;
c=fgetc(fp);
}
else
c=fgetc(fp);
}
str[k]='\0';
c=fgetc(fp);
int p=c-'0';
reverse(str,p);
c=fgetc(fp);
if(c==EOF)
break;
else
c=fgetc(fp);
}
return 0;
}
谢谢!