二级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';

}

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值