C语言 学习笔记(1)

下面是道算法题:

![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”)。(主要是这个起作用)