问题描述:给出一些单词序列,按照以下规则求出单词序列的缩写
⑴小于等于2位字母的单词不要
⑵for,and,the不要,无论大小写
⑶除12点外的单词取其首字母大写按顺序连起来
输入格式:第一行为一个整数n,表示1要缩写的单词序列的个数(n<=100)
接下来n行,每行为一个长度小于100的单词序列,每个单词都由大写或小写字母组成,每个单词直接有一个空格。
输出格式:输出为n行,每行为对应的单词缩写
示例
用户输入:3
association for computer machinery
the lord of rings
rolle
程序输出
ACM
LR
R
#include<iostream>
#include<cstdio>
using namespace std;
char c[1001],ans[101],f[5]={'\0','f','o','r',' '},a[5]={'\0','a','n','d',' '},t[5]={'\0','t','h','e',' '};
int n;
int main(){
int i,j,k,l,m;
scanf("%d",&n);
getchar();
for(i=1;i<=n;i++){
for(j=0;j<=1000;j++) c[j]='\0';
for(j=0;j<=100;j++) ans[j]='\0';
c[0]=' ';
j=0;
l=0;
while(1){
j++;
scanf("%c",&c[j]);
if(c[j]=='\n'){
c[j]='\0';
j--;
break;
}
}
m=0;
while(m<=j){
m++;
if(c[m]==' ') continue;
if(c[m-1]==' '&&c[m+1]==' ') continue;
if(c[m-1]==' '&&c[m+1]!=' '&&c[m+2]==' '){
m++;
continue;
}
char now[5];
for(k=1;k<=4;k++) now[k]=c[m+k-1];
bool f1=1,f2=1,f3=1;
for(k=1;k<=4;k++){
if(now[k]!=f[k]) f1=0;
if(now[k]!=a[k]) f2=0;
if(now[k]!=t[k]) f3=0;
}
if(f1||f2||f3){
m+=2;
continue;
}
l++;
if('a'<=c[m]&&c[m]<='z') ans[l]=c[m]-32;
else ans[l]=c[m];
while(c[m]!=' ') m++;
}
printf("%s\n",ans+1);
}
}
如有答案错误,请谅解(第一次回答嘛)
一个小学生写的,所以有点难看。
思维不够精密,今天发现几个小bug
#include<iostream>
#include<cstdio>
using namespace std;
char c[1001],ans[101],f[5]={'\0','f','o','r',' '},a[5]={'\0','a','n','d',' '},t[5]={'\0','t','h','e',' '};
int n;
int main(){
int i,j,k,l,m;
scanf("%d",&n);
getchar();
for(i=1;i<=n;i++){
for(j=0;j<=1000;j++) c[j]='\0';
for(j=0;j<=100;j++) ans[j]='\0';
c[0]=' ';
j=0;
l=0;
while(1){
j++;
scanf("%c",&c[j]);
if(c[j]=='\n'){
c[j]=' ';
j--;
break;
}
}
m=0;
while(m<=j){
m++;
if(c[m]==' ') continue;
if(c[m-1]==' '&&c[m+1]==' ') continue;
if(c[m-1]==' '&&c[m+1]!=' '&&c[m+2]==' '){
m++;
continue;
}
char now[5];
for(k=1;k<=4;k++){
if('A'<=c[m+k-1]&&c[m+k-1]<='Z')
now[k]=c[m+k-1]+32;
else
now[k]=c[m+k-1];
}
bool f1=1,f2=1,f3=1;
for(k=1;k<=4;k++){
if(now[k]!=f[k]) f1=0;
if(now[k]!=a[k]) f2=0;
if(now[k]!=t[k]) f3=0;
}
if(f1||f2||f3){
m+=2;
continue;
}
l++;
if('a'<=c[m]&&c[m]<='z') ans[l]=c[m]-32;
else ans[l]=c[m];
while(c[m]!=' ') m++;
}
printf("%s\n",ans+1);
}
}
这样估计就对了