求C++编程题目【菜单】计算机菜单中有N个操作,而每个操作都会用一个或更多的单词来描述。

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了求C++编程题目【菜单】计算机菜单中有N个操作,而每个操作都会用一个或更多的单词来描述。相关的知识,希望对你有一定的参考价值。

菜单(存盘文件名为izbornik.pas/c/cpp)
【问题描述】
计算机菜单中有N个操作,而每个操作都会用一个或更多的单词来描述。菜单中从开始到结束的操作,我们会定义快捷键(即从操作描述中选一个字母作快捷键),快捷定义规则如下:
l 它尽量是某个操作描述的所有单词的首字母(从开始到结束)。但这个首字母不能和其它操作描述相同(不可能两个操作用同一个快捷键)
l 如果所有首字母已经被定义,则考虑剩下的字母中找(从开始到结束)
l 如果所有字母都被用了,则没有快捷键
l 这里不区分大小写
给出N个操作描述,输出对应的快捷键。

【输入格式】(输入文件名为izbornik.in)
第1行:正整数N(1≤N≤30),代表菜单中N个操作描述;
第2到N+1行: 每行一个操作描述,最多有5个单词,单词间用一个空格格开。每个单词最多有10个英文字母。

【输出格式】(输出文件名为izbornik.out)
输出N行,要与输入顺序一致,如有快捷键在快捷键字母处加”[]”。

【样例1】
izbornik.in
5
New
Open
Save
Save As
Save All

izbornik.out
[N]ew
[O]pen
[S]ave
Save [A]s
Sa[v]e All

【样例2】
izbornik.in
8
New window
New file
Copy
Undo
Format
Font
Cut
Paste

izbornik.out
[N]ew window
New [f]ile
[C]opy
[U]ndo
F[o]rmat
Fon[t]
Cut
[P]aste

#include <iostream> // cin, cout, cerr
#include <cctype> // toupper
#include <string> // string
#include <vector> // vector
#include <sstream> // stringstream
#include <fstream> // ifstream, ofstream
using namespace std;

bool letterExist[26] =  false ; // 用于查询快捷键(即字母)是否存在的标志
vector< vector<string> > menuVec; // 存储所有菜单信息的二维向量(类似于二维数组)
const string inputFile = "./izbornik.in";
const string outputFile = "./izbornik.out";

int input()

ifstream read(inputFile, ios::in);
if(!read)

cerr << "[READ] Open file error!" << endl;
return -1;

string menu;
while (getline(read, menu)) // 从文件读取菜单信息(一行,包括空格)

// 拆分一行的菜单,形成菜单的单词向量(数组)
stringstream ss;
ss << menu;
string word;
vector<string> wordVec;
while(ss >> word)
wordVec.push_back(word);
// 
menuVec.push_back(wordVec);

read.close();
return 0;


void process()

// 初始化标志
for (int i = 0; i < 26; ++i)
letterExist[i] = false;
// 处理每个菜单
for (int i = 0; i < menuVec.size(); ++i)

bool isFind = false;
// step 1: 首先找同一菜单每个单词的首字母
// [0]所有单词首字母
for (int j = 0; j < menuVec[i].size(); ++j)

int index = toupper(menuVec[i][j][0]) - 'A';
//cout << i << "|" << j << "|" << "0" << endl;
if (!letterExist[index])

//
string headStr;
headStr += '[';
headStr += menuVec[i][j][0];
headStr += ']';
menuVec[i][j] = headStr + 
menuVec[i][j].substr(1, menuVec[i][j].size() - 1);
//
letterExist[index] = true;
isFind = true;
break;


//![0]
// step 2: 让后从剩下的所有单词字母中找
// [1]除去首字母之外后的所有字母
if (!isFind)

for (int j = 0; j < menuVec[i].size(); ++j)

for (int k = 1; k < menuVec[i][j].size(); ++k)

int index = toupper(menuVec[i][j][k]) - 'A';
//cout << i << "|" << j << "|" << k << endl;
if (!letterExist[index])

//
string headStr;
headStr += menuVec[i][j].substr(0, k);
headStr += '[';
headStr += menuVec[i][j][k];
headStr += ']';
menuVec[i][j] = headStr + 
menuVec[i][j].substr(k + 1, menuVec[i][j].size() - k - 1);
//
letterExist[index] = true;
isFind = true;
break;


if (isFind)
break;


//![1]



int output()

ofstream write(outputFile, ios::out);
if (!write)

cerr << "[WRITE] Open file error!" << endl;
return -1;

for (int i = 0; i < menuVec.size(); ++i)

int j;
for (j = 0; j < menuVec[i].size() - 1; ++j)

write << menuVec[i][j] << " ";

write << menuVec[i][j] << endl;

write.close();
return 0;


int menu_main()

if (input() == 0)

process();
if(output() == 0)

cout << "All process done!" << endl;
return 0;

else
return -1;

else

return -1;

备注:

输入文件放在当前目录下(和main文件同级),文件只存放菜单内容,如:

New
Open
Save
Save As
Save All

其他格式可按照题目要求改~

参考技术A #include <bits/stdc++.h>
using namespace std;
int n,k;
string a,b;
bool c[100]=1;
int zh(int x)

if(x>='a')x-=32;
if(x==' ')x=0;
return x;

int main()
cin>>n;
getline(cin,a);
for(int i=1;i<=n;i++)

k=0;
getline(cin,a);
b=a;
while(b.find(' ')!=-1)

if(c[zh(b[0])]==0)

k=b[0];
c[zh(k)]=1;
break;

b.erase(0,b.find(' ')+1);

if(k==0)

b=a;
while(b.length())

if(c[zh(b[0])]==0)

k=b[0];
c[zh(k)]=1;
break;

b.erase(0,1);


for(int i=0;i<a.length();i++)

if(a[i]!=k)cout<<a[i];
else

cout<<'['<<char(k)<<']';
k=0;


cout<<endl;

return 0;
参考技术B @喧世幽人 答案我这儿编译错误

以上是关于求C++编程题目【菜单】计算机菜单中有N个操作,而每个操作都会用一个或更多的单词来描述。的主要内容,如果未能解决你的问题,请参考以下文章

请问这道c++编程题怎么做?(急求大神帮忙)——抽奖2

高分求作一个c语言编程的操作界面

c++编程题目,求1到N之间数字1出现的个数。程序不用写,告诉我规律就好,自己写的老是超时

题目:(c++)N为正整数,计算从1到N的所有整数中包含数字1的个数。 求大神看看程序哪里错了!

基于el-menu,用递归实现动态n级菜单

编写一个弹出式菜单的shell程序,利用函数实现简单的菜单功能,n的值由键盘输入: