楼上代码不完整。。。我来放完整的
#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; } }
我也是用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(); } }
本题主要注意截取字符串中的单词,然后一个坑点就是可能出现类似 “! “的情况,会给单词截取带来一些麻烦。
#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; }
不算短,但比较好理解的方法。字符串流+set+string+getline 还有那个isalpha,也是很大的
不算短,但比较好理解的方法。字符串流+set+string+getline
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; }
我来公布答案啦
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; }
这道题不难,之前大佬的C代码不完整我也不补了。注意一点:单词之间的空格(或标点)可能有多个。
我来公布答案啦 学习一下QAQ QAQ欢迎交流
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; }
我来公布答案啦 可啪的柠檬[em:01] 一百题纪念一下 计算机人的一生,一定要有一次得过编程奖金,codeforces也好,51nod也罢,我行走在路上 [em:12] 装完逼快跑
紫书例题+论新手如何使用Set+String
我又来水Python思路了 Python字符串自带的split函数只能以指定的单个字符串分割,不过re.split可以利用多个。需要注意的是’?’字符,要么写成\?要么写成[?],不然会报错。最后记得去掉空字符就行
楼上代码不完整。。。我来放完整的
我也是用C++标准库的东西做的,很方便。
本题主要注意截取字符串中的单词,然后一个坑点就是可能出现类似 “! “的情况,会给单词截取带来一些麻烦。
不算短,但比较好理解的方法。字符串流+set+string+getline
还有那个isalpha,也是很大的
不算短,但比较好理解的方法。字符串流+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;
}
我来公布答案啦
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;
}
这道题不难,之前大佬的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++)
{
}
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;
}
我来公布答案啦
可啪的柠檬[em:01]
一百题纪念一下
计算机人的一生,一定要有一次得过编程奖金,codeforces也好,51nod也罢,我行走在路上
[em:12]
装完逼快跑
紫书例题+论新手如何使用Set+String
我又来水Python思路了
Python字符串自带的split函数只能以指定的单个字符串分割,不过re.split可以利用多个。需要注意的是’?’字符,要么写成\?要么写成[?],不然会报错。最后记得去掉空字符就行