c语言问题各位大侠帮帮我 荷兰旗问题:无序输入一定的r,w,b,只进行一次遍历,将其按rwb顺序输出。

来源:百度知道 编辑:UC知道 时间:2024/06/24 00:02:01
荷兰旗问题:无序输入一定的r,w,b,只进行一次遍历,将其按rwb顺序输出。
例input;wwrrbbrwrb。
output:rrrrwwwbbb。

本题的一个完整的c程序如下,win-tc和Dev-c++下调试通过。
/* 荷兰旗问题:无序输入一定的r,w,b,只进行一次遍历,将其按rwb顺序输出。 */
#include <stdio.h>
#include <string.h>
#define N 81 /*设输入字符串不超过80字符,可更改*/

int main()
{int i,j;
char s[N],ch;
printf("Please input a string:\n"); /*将输入当成字符串简化处理*/
gets(s); /* 你要是说按brw或者wrb排序输出多好,那就根本不需要下面的替换 */
for(i=0;i<strlen(s);i++)
{if(s[i]=='r') /* 根据题意这里用替换法,具有通用性 */
s[i]='c';
if(s[i]=='w')
s[i]='d';
if(s[i]=='b')
s[i]='e';
}
for(i=1;i<strlen(s);i++) /* 一次插入排序解决问题 */
{ch=s[i];
j=i-1;
while(j!=-1&&ch<s[j])
{
s[j+1]=s[j];
j--;
}
s[j+1]=ch;
}
printf("The result you want is:\n");
for(i=0;i<strlen(s);i++) /*排序完成后再替换回原样输出*/
{if(s[i]=='c')
s[i]='r';
if(s[i]=='d')
s[i]='w';