字符读取
注意事项
读取未知数目的单词,单词之间有未知数目的空格隔开,输入的单词不会跨行,最后以 #
代表输入结束。
样例输入:
ladder came tape soon leader acme RIDE lone Dreis peat
ScAlE orb eye Rides dealer NotE derail LaCeS drIed
noel dire Disk mace Rob dries
#
注意第二行的开头可以是空格。
读取单词并存进数组的代码如下:
vector<string> words;
string tmp = "";
char c = getchar();
while (1) {
if (c == '#')
break;
else if (c == '\n' || c == ' ') {
if (tmp.size()) {
//若当前tmp有字符,则插入
words.push_back(tmp);
mp[to_low(tmp)]++;
tmp.clear();
}
}
else tmp += c;
c = getchar();
}
参考代码
#include<stdio.h>
#include<iostream>
#include<vector>
#include<cstring>
#include<cstdio>
#include<climits>
#include<cmath>
#include<algorithm>
#include<queue>
#include<deque>
#include<map>
#include<set>
#include<stack>
#define LL long long
#define LOCAL
const int maxn = 50;
using namespace std;
int readint() {
int x; scanf("%d", &x); return x;
}
string to_low(string s) {
for(int i = 0; i < s.size(); i++) {
s[i] = tolower(s[i]);
}
sort(s.begin(), s.end());
return s;
}
int main() {
#ifdef LOCAL
freopen("input.txt", "r", stdin);
// freopen("output.txt", "w", stdout);
#endif
vector<string> words, ans;
map<string, int> mp;
string tmp = "";
char c = getchar();
while (1) {
if (c == '#')
break;
else if (c == '\n' || c == ' ') {
if (tmp.size()) {
// cout << "当前words大小:" << words.size() << " 当前要插入的字符串" << tmp << endl;
words.push_back(tmp);
mp[to_low(tmp)]++;
tmp = "";
}
}
else tmp += c;
c = getchar();
}
for(int i = 0; i < words.size(); i++) {
if (mp[to_low(words[i])] == 1) {
ans.push_back(words[i]);
}
}
sort(ans.begin(), ans.end());
for(int i = 0; i < ans.size(); i++) {
printf("%s\n", ans[i].c_str());
}
return 0;
}