【字符串排序】UVA-156 Ananagrams

字符读取

UVA 156 Ananagrams

注意事项

读取未知数目的单词,单词之间有未知数目的空格隔开,输入的单词不会跨行,最后以 # 代表输入结束。

样例输入:

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;
}

猜你喜欢

转载自blog.csdn.net/Encore47/article/details/113135615
今日推荐