【问题描述】
维亚是一家音乐俱乐部里的音乐DJ,在工作中经常使用Dubstep(回响贝斯)音乐。最近,他决定拿出几首老歌进行混音处理。
假定一首歌的歌词是一句英文句子,为了将Dubstep混录到歌曲里,维亚将一定数量(可以为0)的“WUB”插入到歌词的第一个单词之前、最后一个单词之后(可以为0)、以及两个单词之间(在相邻的一对单词之间至少一个),然后他将所有的单词包括“WUB”合并在一起形成一个混音字符串,在俱乐部里播放。
例如,歌词"I AM X"可以转换为回响贝斯混音“WUBWUBIWUBAMWUBWUBX”,但不能转换为“WUBWUBIAMWUBX”。
有人突发奇想,在听过维亚播放过的混音之后,尝试恢复原始的歌曲,请你帮助他。
【输入形式】
输入为一行非空字符串,由英文字母组成,长度不超过200个字符。表示这是经过混音之后的歌词,输入保证在混入“WUB”之前,原始歌词中不包括“WUB”,且歌词至少包含一个单词。
【输出形式】
输出为一行一个字符串,表示原始的歌词。
【样例输入】
WUBWEWUBAREWUBWUBTHEWUBCHAMPIONSWUBMYWUBFRIENDWUB
【样例输出】
WE ARE THE CHAMPIONS MY FRIEND
解题思路:
先将指定字符串换成空格,在处理空格
处理空格的方式有两种
1、将字符串前移
2、复制带空格的字符串,保证单词之间只有一个空格
注意:
1、空格的ASCII为32
2、了解append()函数
第一种方法:
#include <iostream>
#include <string>
#include <cstring>
#include <stdio.h>
using namespace std;
void space(char* str)
{
int i, j, k;
for (i = 0; str[i] != EOF; i++)
{
if (str[i] == 32 && str[i + 1] == 32)
{
k = i;
for (j = i; str[j] != EOF; j++) //连续两个空格后第一个不为空格的字符的位置j
if (str[j] != 32)
break;
for (; str[j] != EOF; j++) //将j和j以后的字符往前移到第一个空格后
{
str[k + 1] = str[j];
k++;
}
}
}
if (str[0] == 32)
{
for (i = 0; str[i] != EOF; i++)
{
str[i] = str[i + 1];
}
}
//puts(str);
printf("%s", str);
}
int main()
{
char song[1000];
cin.get(song, 1000);
int len = strlen(song);
for (int i = 0; i < len - 2; i++) //将WUB换成空格
{
if (song[i] == 'W' && song[i + 1] == 'U' && song[i + 2] == 'B') //空格ASCII为32
{
song[i] = 32;
song[i + 1] = 32;
song[i + 2] = 32;
i += 2;
}
}
space(song);
}
第二种方法:
#include <iostream>
#include <string>
using namespace std;
void copy(string str)
{
string result = "";
for (int i = 0; str[i] != '\0'; i++) //如果有两个以上的空格,就不复制
{
if (str[i] != 32)
result.append(1, str[i]);
else
if (str[i + 1] != 32)
result.append(1, str[i]);
}
//第一个字符为空格,将字符串前移
if (result[0] == 32)
{
for (int i = 0; result[i] != '\0'; i++)
{
result[i] = result[i + 1];
}
}
cout << result;
}
int main()
{
string str;
getline(cin, str);
for (int i = 0; str[i] != '\0'; i++)
{
if (str[i] == 'W' && str[i + 1] == 'U' && str[i + 2] == 'B') //空格ASCII为32
{
str[i] = 32;
str[i + 1] = 32;
str[i + 2] = 32;
i += 2;
}
}
copy(str);
return 0;
}