天天看點

二級C語言(4)

2.字元串處理

這類題的機率較大,是以一定要引起注意, 這類題并不難但要細心.除去下例外還有内容置逆.

例6.  假定輸入的字元串中之含有字母和*号。請編制一函數fun(),其功能是:将字元串第一個字母前的所有*号移動到字元串後面

例如: 原字元串:******A*BC*DEF*G****

     處理後的串:A*BC*DEF*G**********

注意:部分源程式已給出。

請勿改動主函數main()的内容。

試題程式:

#include <conio.h>

#include <stdio.h>

void fun(char *a)

{

}

main()

{

char s[81],*p;

int n=0;

clrscr();

printf("/n/nInput a String s:");

gets(s);

fun(s);

printf("/n/nThe String after moving:");puts(s);

}

本題難點

:究竟内部是如何在移動呢?

起初:
* * * * A * B C * * D E F * G * * * *
第一次移動:
* * * A * B C * * D E F * G * * * *
*
第一次移動:
* * * A * B C * * D E F * G * * * *
*
第一次移動:
* * * A * B C * * D E F * G * * * *
*
第一次移動:
* * * A * B C * * D E F * G * * * *
*

。。。。。。

第一次移動:

* * * A * B C * * D E F * G * * * * *
*

可以重複四次,就行了

也可以用以下方法

起初:

* * * * A * B C * * D E F * G * * * *
第一次:
A * * * * B C * * D E F * G * * * *
* 4
第二次:
A * * * B C * * D E F * G * * * *
* 4
一共移動n-4次,然後在後面添加4個*号就行。
參考答案

void fun(char *a)

{

int i=0,n=0,j=0;

while(a[i]=='*')

{

     i++;

     n++;

}

while(a[j]!='/0')

{

     j++;

}

for(i=0;i<j-n;i++)

{

     printf("%c",a[n+i]);

     a[i]=a[n+i];

}

for(i=j-n;i<=j;i++)

{

     a[i]='*';

}

a[j]='/0';

}

繼續閱讀