プロファイルのリカバリ


説明:
6つの構成コマンドがあり、その結果、reset reset what reset board board fault board add where to add board delet no board at all reboot backplane impossible backplane abort install first he unkown command注意:he heはコマンドではありません.入力を簡略化するために、ユーザーを便利にするために、「最短一意一致原則」で一致させる:1、文字列のみを入力すると、キーワードのコマンドラインのみが一致する.例えば入力:r、この規則に従って、コマンドresetに一致し、実行結果は:reset what;入力:res、このルールに基づいて、コマンドresetに一致し、実行結果は:reset what;2、文字列のみを入力する場合、このコマンドに2つのキーワードがある場合、一致に失敗します.たとえば、入力:rebは、コマンドreboot backpalneを見つけることができますが、このコマンドには2つのキーワードがあり、すべてのマッチングに失敗しました.実行結果は、unkown command 3、2文字列を入力すると、まず第1のキーワードをマッチングし、マッチングがあるが一意でない場合は、第2のキーワードをマッチングし続け、まだ一意でない場合はマッチングに失敗します.たとえば、r bと入力し、一致コマンドreset boardを見つけ、実行結果はboard faultです.4、2文字列を入力すると、まず第1のキーワードに一致し、一致しているが一意でない場合は、第2のキーワードに一致し続け、一意である場合は一致に成功する.例えば、入力:b aは、コマンドboard addかbackplane abortか判断できず、マッチングに失敗します.5、二文字列を入力して、第一キーワードのマッチングに成功した場合、第二キーワードをマッチングし、マッチングがなければ失敗する.たとえば入力:bo a、コマンドboard addであることを決定し、マッチングに成功します.6、照合に失敗した場合、「unkonw command」を印刷する
タイトルカテゴリ:
文字列
難易度:
上級
実行時間の制限:
10Sec
メモリの制限:
128MByte
ステージ:
入社前の練習
入力:
複数行文字列、1行あたり1つのコマンド
出力:
実行結果、コマンドごとに1行出力
サンプル入力:
reset
reset board
board add
board delet
reboot backplane
backplane abort
                   

サンプル出力:
reset what
board fault
where to add
no board at all
impossible
install first

コード:
#include 
#include 
using namespace std;
int countSpace(const char a[])
{
	int i = 0,count = 0;
	while(a[i] != '\0')
	{
		if(a[i] == ' ')
		{
			count++;
		}
		i++;
	}
	return count;
}
bool compare(const char v1[],const char v2[])
{
	int i = 0,j = 0;
	while(v2[j] != '\0')
	{
		if(v1[i] == '\0')
			return false;
		// v2 , v1 v2 
		if(v2[j] == ' ')
		{
			while(v1[i] != ' ')
				i++;
			i++;j++;
		}
		if(v2[j] == v1[i])
		{
			i++;
			j++;
		}
		else
			return false;
	}
	return true;
}
int main()
{
	char mnue[6][25] = {"reset","reset board","board add","board delet","reboot backplane","backplane abort"};
	char str[50][50];
	int i = 0;
	while(cin.getline(str[i],49,'
') && str[i][0] != '\0') i++; if(i == 0) cout << "unkown command" <