要求
请编写函数fun,函数的功能是:移动字符串中的内容,移动的规则如下:把第1到第m个字符平移到字符串的最后,把第m+1到最后的字符移到字符串的前部。
例如,字符串中原有的内容为:ABCDEFGHIK,
m的值为3,
则移动后字符串中的内容应该是:DEFGHIKABC.
解题思路
定义一个字符在循环中存放w的首地址
依次将w现在位置的字符存放在它的前一位里 循环m次
因为嵌套的循环结束条件是最后一位是空时,那么就需要将目前的位置减一来存放之前保存的首地址
代码
#include <stdio.h>
#include <string.h>
#define N 80
void fun1(char *w) /* 本函数的功能是将字符串中字符循环左移一个位置 */
{
int i; char t;
t=w[0];
for(i=0;i<(int)strlen(w)-1;i++)
w[i]=w[i+1];
w[strlen(w)-1]=t;
}
void fun(char *w, int m) /* 可调用fun1函数左移字符 */
{
int i = 0;
int j = 0;
char txp ={0};
for(i=1;i<=m;i++)
{
txp = w[0];
for(j=1;w[j]!='\0';j++)
{
w[j-1]=w[j];
}
w[j-1]=txp;
}
}
main()
{ char a[N]= "ABCDEFGHIJK";
int m;void NONO ();
printf("The original 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");
NONO();
getchar();
}
void NONO ()
{/* 请在此函数内打开文件,输入测试数据,调用 fun 函数,输出数据,关闭文件。 */
FILE *rf, *wf ; char a[N] ; int m, i ;
rf = fopen("in.dat","r") ;
wf = fopen("out.dat","w") ;
for(i = 0 ; i < 10 ; i++) {
fscanf(rf, "%d %s", &m, a) ;
fun(a, m) ;
fprintf(wf, "%s\n", a) ;
}
fclose(rf) ; fclose(wf) ;
}