1、输入一组单词(区分大小写),统计首字母相同的单词的个数,相
同的单词不累加,输出格式:“字母,个数”
input: I am a boy,you are a boy.
output:
I,1
a,3
b,1
y,1
代码:
#include <bits/stdc++.h>
using namespace std;
vector<int> nums; // 存数
int main()
{
string s;
getline(cin, s);
// 分解单词
vector<string> ans;
int i = 0;
while (i < s.size()) {
for (int j = i; j <= s.size(); j++) {
if (s[j] == ' ' || s[j] == ',' || s[j] == '.') {
ans.push_back(s.substr(i, j-i));
i = j+1;
break;
}
}
}
for (string i : ans) {
cout << i << endl;
}
set<string> se;
for (string i : ans) {
se.insert(i);
}
map<char,int> m;
for (auto i : se) {
m[i[0]]++;
}
for (auto it : m) {
cout << it.first << ',' << it.second << endl;
}
}
2、输入一组单词,(区分大小写),输出其字典排序。
input: Information Info Inform info Suite suite suit
output: Info Inform Information Suite info suit suite
代码:
#include <bits/stdc++.h>
using namespace std;
priority_queue<string,vector<string>,greater<string>> q;
int main()
{
string s;
while (cin >> s) {
q.push(s);
if (getchar() == '\n') break;
}
while (!q.empty()) {
cout << q.top();
if (q.size() > 1) cout << ',';
q.pop();
}
return 0;
}
3、给一个字符串(aaaa(bbbb(cccc,dddd),eeee(ffff)))该字符串
表明的是各个人的层次关系。
比如aaaa是bbbb和eeee的领导,bbbb是cccc和dddd的领导。
现输入一个名称,比如ffff,要求输出其领导关系
input: (aaaa(bbbb(cccc,dddd),eeee(ffff)))
output: aaaa>eeee>ffff
代码:
#include <bits/stdc++.h>
// 遇到( 如果栈里面没有 ), 那么( 左边的字母就是一个祖先 前提是( 左边有字母
// 遇到)直接进栈
using namespace std;
int main()
{
string s;
stack<char> st;
string tar;
cin >> s >> tar;
int idx = -1; // 目标人物的下标
for (int i = 0; i < s.size(); i++)
if(s[i] == tar[0]) {
idx = i;
break;
}
vector<string> ans; // 存储领导关系
ans.push_back(tar);
for (int i = idx-1; i >= 0; i--) {
if (s[i] == ')') st.push(s[i]); // 栈里面只存右括号
else if (s[i] == '(') {
if (i - 1 >= 0 && isalpha(s[i-1])) { // 左括号的左边是一个人
if (st.size() == 0) ans.push_back(s.substr(i-4, 4));
else st.pop();
}
}
}
for(int i = ans.size()-1; i >= 0; i--) {
cout << ans[i];
if (i != 0) cout << '>';
}
}