目录
1.只有空格分隔并从左往右处理每个单词
从左往右处理其中的每个单词我们一般使用字符串循环输入的方式,格式如下:
string s;
while(cin>>s){
//具体处理某单词;
}
CD202203_2_3. 单词的长度
描述:
输入一行单词序列,相邻单词之间由1个或多个空格间隔,请对应地计算各个单词的长度。
注意,如果有标点符号(如连字符,逗号),标点符号算作与之相连的词的一部分。没有被空格间开的符号串,都算作单词。输入描述:
一行单词序列,最少1个单词,最多300个单词,单词之间用至少1个空格间隔。单词序列总长度不超过1000。
输出描述:
依次输出对应单词的长度,之间以逗号间隔。
用例输入:
She was born in 1990-01-02 and from Beijing city.用例输出:
3,3,4,2,10,3,4,7,5
最后一个数字之后没有逗号输出,所以先输出第一个数字,后面的输出逗号和数字。
#include<bits/stdc++.h>
using namespace std;
int main(){
string s;
cin>>s;
int a=s.size();
cout<<a;
while(cin>>s){
a=s.size();
cout<<','<<a;
}
return 0;
}
2.只有空格分隔并从右往左处理每个单词
如果遇到每个单词之间只有空格分隔,没有别的特殊的标点符号,从右往左处理其中的每个单词我们一般使用字符串数组储存。格式如下:
string arr[10000];
int i = 0;
while(cin>>arr[i]){
i++;
//具体处理某单词;
}
CD202009_2_5. 单词倒排
描述:
编写程序,读入一行英文(只包含字母和空格,单词间以单个空格分隔),将所有单词的顺序倒排并输出,依然以单个空格分隔。
输入描述:
输入为一个字符串(字符串长度至多为100)。
输出描述:
输出为按要求排序后的字符串。
用例输入: 用例输出:
I am a student student a am I
#include<bits/stdc++.h>
using namespace std;
string arr[300];
int main(){
int n=0;
string s;
while(cin>>s){
n++;
arr[n]=s;
}
for(int i=n;i>=0;i--){
cout<<arr[i]<<' ';
}
return 0;
}
3.除空格外有别的分隔符号
string s;
getline(cin,s);
int start=0,end;
for(int i=0;i<=s.size();i++){
//寻找空格,逗号,句号的位置
if(s[i]==' '||s[i]==','||s[i]=='.'||s[i]=='\0'){
end=i-1;//确定上个单词的结束位置
//具体处理某单词;
start=i+1;//更新start为下个单词的起点
}
}
CD202212_2_2. 最长最短单词
描述:
输入1行句子(不多于200个单词,每个单词长度不超过100),只包含字母、空格和逗号。单词由至少一个连续的字母构成,空格和逗号都是单词间的间隔。
试输出第1个最长的单词和第1个最短单词。输入描述:
一行句子。
输出描述:
两行输出: 第1行,第一个最长的单词。 第2行,第一个最短的单词。
用例输入:
I am studying Programming language C in Peking University用例输出:
Programming I
#include<bits/stdc++.h>
using namespace std;
int main(){
string s;
getline(cin,s);
s=s+' ';
int start=0,end;
int maxx=0,minn=110;
string t1,t2;
for(int i=0;i<s.size();i++){
if(s[i]==' '||s[i]==','){
end=i-1;
string t="";
if(end>=start){
for(int j=start;j<=end;j++){
t+=s[j];
}
if(t.size()>maxx){
t1=t;
maxx=t.size();
}
if(t.size()<minn){
t2=t;
minn=t.size();
}
start=i+1;
}
}
}
cout<<t1<<endl<<t2;
return 0;
}
4.最长公共子串
#include<bits/stdc++.h>
using namespace std;
int main(){
string s1,s2;
cin>>s1>>s2;
int maxx=0;
for(int i=0;i<s1.size();i++){
for(int j=1;j<=s1.size();j++){
if(i+j>s1.size()) break;
string t=s1.substr(i,j);
if(s2.find(t)!=-1){
int n=t.size();
maxx=max(n,maxx);
}
}
}
cout<<maxx;
return 0;
}