|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
#include <stdio.h>
#include <string.h>
#define N 80
void fun (char *w,int m)
{
char c[N];
int len=0;
while(w[len]!='\0')
{
len++;
}
printf("该字符串长度为%d",len);
int i , j ;
for (i = 0 ; i < m ; i++)
c[i] = 0;//初始化
for (j = 0 ; j < m ; j++)//暂存需要往后移动的m个字符
c[j] = w[j];
for (i = m ; i < len ; i++)//把m+1到最后的字符往前移
w[i-m] = w[i];
for (j = len-m,i=0 ; j < len ; j++,i++)
{
w[j] = c[j];
}
printf("移动后:");
for(i=0;i<len;i++)
{
printf("%c ",w[i]);
}
}
void main()
{
FILE *wf;
char a[N]= "ABCDEFGHIJK",b[N]= "ABCDEFGHIJK";
int m;
printf("The origina string :\n");
puts(a);
printf("\n\nEnter m: ");
scanf("%d",&m);
fun(a,m);
printf("\nThe string after moving :\n");
puts(a);
printf("\n\n");
/******************************/
wf=fopen("out.dat","w");
fun(b,3);
fprintf(wf,"%s",b);
fclose(wf);
/*****************************/
}
本帖最后由 jackz007 于 2018-9-10 12:17 编辑
可以很负责任地告诉你,确实有错,问题点为:
- for (j = len-m,i=0 ; j < len ; j++,i++)
- {
- w[j] = c[j];
- }
复制代码
w[j] = c[j] ; 2 个数组居然使用了相同的索引下标,你说有没有问题?
应该这样改:
- for(i = 0 ; i < m ; i ++) w[len - m + i] = c[i] ;
- w[len] = 0 ;
复制代码
另外,你的代码不够简洁,下面是完全按照你的思路给出的 fun()
- void fun(char * w , const int m)
- {
- char c[N] ;
- int i , len = 0 ;
- while(w[len]) len ++ ;
- printf("该字符串长度为%d\n" , len) ;
- for(i = 0 ; i < m ; i ++) c[i] = w[i] ;
- for(i = m ; i < len ; i ++) w[i - m] = w[i] ;
- for(i = 0 ; i < m ; i ++) w[len - m + i] = c[i] ;
- w[len] = 0 ;
- printf("移动后:") ;
- for(i = 0 ; i < len ; i++) printf("%c" , w[i]) ;
- printf("\n") ;
- }
复制代码
你可以试一试,看看是不是你需要的,希望能解决你的问题。
|
-
|