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);
}
本题难点:究竟内部是如何在移动呢?
起初:
第一次移动:
第一次移动:
第一次移动:
第一次移动:
。。。。。。 第一次移动:
可以重复四次,就行了 也可以用以下方法 起初:
第一次:
第二次:
一共移动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';
}