3124. 单词表

帕秋莉_诺蕾姬

楼上代码不完整。。。我来放完整的

#include<bits/stdc++.h>
using namespace std;
int main()
{
    int t; string str, tmp;
    (cin >> t).get();
    for (int c = 0; c < t; c++)
    {
        getline(cin, str);
        for (auto &i : str)
            if (!isalpha(i))i = ' ';
        stringstream ss(str);
        set<string>ans;
        while (ss >> tmp)ans.insert(tmp);
        auto x = ans.begin();
        cout << "case #" << c << ":\n" << *x;
        while (++x != ans.end())
            cout << ' ' << *x;
        cout << endl;
    }
}
Fifnmar

我也是用C++标准库的东西做的,很方便。

#include <algorithm>
#include <iostream>
#include <set>
#include <sstream>
#include <string>

using namespace std;

void solve() {
    string text;
    getline(cin, text);
    for (auto &i : text)
        if (i == ',' || i == '.' || i == '!' || i == '?')
            i = ' ';
    istringstream strin(text);
    set<string> a;
    string temp;
    while (strin >> temp) {
        a.insert(temp);
    }
    if (a.empty() == false) {
        cout << *a.begin();
        for (auto i = ++a.begin(), ed = a.end(); i != ed; ++i)
            cout << ' ' << *i;
    }
    cout << '\n';
}

int main() {
    int t;
    cin.tie(0);
    ios::sync_with_stdio(0);
    cin >> t;
    cin.get(); // 这两行也可以改成 (cin >> t).get(),因为cin的>>重载返回cin。
    for (int i = 0; i < t; ++i) {
        cout << "case #" << i << ":\n";
        solve();
    }
}
Li Dao

不算短,但比较好理解的方法。字符串流+set+string+getline
还有那个isalpha,也是很大的

Li Dao

不算短,但比较好理解的方法。字符串流+set+string+getline

include

using namespace std;
int T;
string strs,tmp;
set Set;

int main()
{
cin>>T;
getline(cin,strs);
for(int step=0;step>tmp) Set.insert(tmp);
set::iterator iter=Set.begin();
int ff=1;
printf(“case #%d:\n”,step);
while(iter!=Set.end())
{
if(ff) {ff=0;cout<<(iter);}
else cout<<’ ‘<<(
iter);
++iter;
}
cout<<endl;
}
return 0;
}

10152130230

我来公布答案啦

include

include

include

int cmp(const voida,const void b)
{
return strcmp((char)a,(char)b);
}

int main()
{
int T,i,j,x,m,n;
char s[505],t[505][50];
scanf(“%d”,&T);
getchar();
for(i=0;i<T;i++)
{
gets(s);
m=0;
n=0;
x=strlen(s);
for(j=0;j=’a’&&s[j]<=’z’)&&(s[j+1]>=’a’&&s[j+1]<=’z’))
{
t[m][n]=s[j];
n++;
}
else if((s[j]>=’a’&&s[j]<=’z’)&&(s[j+1]<=’a’||s[j+1]>=’z’))
{
t[m][n]=s[j];
t[m][n+1]=’\0’;
m++;
n=0;
}
}
qsort(t,m,sizeof(t[0]),cmp);
printf(“case #%d:\n”,i);
printf(“%s”,t[0]);
for(j=1;j<m;j++)
{
if(strcmp(t[j-1],t[j])!=0)
printf(” %s”,t[j]);
}
printf(“\n”);
}
return 0;
}

10175102262 LarsPendragon

这道题不难,之前大佬的C代码不完整我也不补了。注意一点:单词之间的空格(或标点)可能有多个。

一剑无痕雪满山

我来公布答案啦
学习一下QAQ
QAQ欢迎交流

include

include

include

int cmp(const void a,const void b)
{
return(strcmp((char)a,(char)b));
}
void solve()
{
char text[511];char word[511][100];
gets(text);
int i=0,j=0,k=0;int flag=0;
for (i=0;i<=strlen(text);i++)
{

if (text[i]>='a'&&text[i]<='z')
{word[k][j]=text[i];j++;flag=1;}
else {if(flag==1) {k=k+1;j=0; flag=0;}}

}
qsort(word,k,sizeof(word[0]),cmp);
printf(“%s”,word[0]);
i=1;
for(i=1;i<k;i++){
if(strcmp(word[i],word[i-1])!=0)
printf(” %s”,word[i]); }

printf(“\n”);
i=0;j=0;k=0;
memset(text,0,sizeof(text));
memset(word,0,sizeof(word));
}

int main()
{
int i,t;
scanf(“%d”,&t);getchar();
for (i=0;i<t;i++) {printf(“case #%d:\n”,i); solve(); }
return 0;
}

10152130230

我来公布答案啦
可啪的柠檬[em:01]
一百题纪念一下
计算机人的一生,一定要有一次得过编程奖金,codeforces也好,51nod也罢,我行走在路上
[em:12]
装完逼快跑

Master X

紫书例题+论新手如何使用Set+String

13627999316

本题主要注意截取字符串中的单词,然后一个坑点就是可能出现类似 “! “的情况,会给单词截取带来一些麻烦。

#include <bits/stdc++.h>
using namespace std;
set<char> se{',','.','!','?',' '};
int main() {
    int n,cnt = 0;cin>>n;
    getchar();      
    while(n--) {
        string s,danci;
        set<string> ans;
        getline(cin,s);
        printf("case #%d:\n",cnt++);
        int i,j,nexti;      // 
        for(i = 0;i < s.length();i=nexti) {
            for(j = i;j < s.length() && se.find(s[j]) == se.end();
            j++);
                danci = s.substr(i,j-i);        //截取单词 
                ans.insert(danci);
                for(nexti = j+1;se.find(s[nexti]) != se.end();nexti++);
        }
        int cnt = 0;
        for(auto it = ans.begin();it != ans.end();it++) {
            if(cnt > 0) cout<<" ";
            cout<<*it;
            cnt++;
        }
        cout<<endl;
    }
    return 0;
}
告白于荆州

我又来水Python思路了
Python字符串自带的split函数只能以指定的单个字符串分割,不过re.split可以利用多个。需要注意的是’?’字符,要么写成\?要么写成[?],不然会报错。最后记得去掉空字符就行

你当前正在回复 博客/题目
存在问题!