下面是道算法题:
![2015-11-20_17-11-59.png][1]
我先用c++编写;
#include <iostream.h>
void main()
{
char i,j,a[200],ch=' ',t=0;
cin.getline(a,200);
for (i=0;a[i]!='\0';i++)
{if (a[i]=='W'&&a[i+1]=='U'&&a[i+2]=='B')
{ a[i]=' ';
a[i+1]=a[i];
a[i+2]=a[i+1];//用空格替换掉,但就有三个空格了
delet(a,' ');//删除空格,这时所有字符连在一起
cout<<" ";//为了在删除点制造一个空格}
cout<<a[i];}
cout<<a[0];
}
void delet(char a[],char ch)//删除指定字符
{
int i,j;
for(i=j=0;a[i]!='\0';i++)
{
if(a[i]!=ch)
a[j++]=a[i];
}
a[j]='\0';
}
但当为WUBWUBIWUBLOVEWUBYOU会变为 I LOVE YOU;
I前面会有空格,不符合题意;看来还是失败了TAT;
查了一个看起来简洁的答案
#include <stdio.h>
#include <string.h>
int main()
{
char s[200];
int a, b, i, j, k;
scanf("%s", s);
k = strlen(s);
a = 0;
b = 0;
for(i = 0; i < k; i++)
{if(s[i]=='W'&&s[i+1]=='U'&&s[i+2]=='B')
{if(b != 0&&a!=1)
printf(" ");i = i + 2;a = 1;
}
else
{printf("%c",s[i]);b = 1;a = 0;
}
}
printf("\n");
return 0;
}
资料:#include <string.h>:C语言里面关于字符数组的函数定义的头文件,常用函数有strlen、strcmp、strcpy等等。
strlen所作的仅仅是一个计数器的工作,它从内存的某个位置(可以是字符串开头,中间某个位置,甚至是某个不确定的内存区域)开始扫描,直到碰到第一个字符串结束符’\0’为止,然后返回计数器值(长度不包含”\0”)。(主要是这个起作用)