二、1009 说反话 (20分)
给定一句英语,要求你编写程序,将句中所有单词的顺序颠倒输出。
输入格式:
测试输入包含一个测试用例,在一行内给出总长度不超过 80 的字符串。字符串由若干单词和若干空格组成,其中单词是由英文字母(大小写有区分)组成的字符串,单词之间用 1 个空格分开,输入保证句子末尾没有多余的空格。
输出格式:
每个测试用例的输出占一行,输出倒序后的句子。
输入样例:
Hello World Here I Come
输出样例:
Come I Here World Hello
#include<string.h>#include<stdio.h>intmain(){char str[90];gets(str);int len =strlen(str),row=0,col=0;char ans[90][90];//存放单词for(int i=0;i<len;i++){if(str[i]!=' '){
ans[row][col++]=str[i];}else//如果是空格,说明一个单词结束,行+1,列回复到0{
ans[row][col]='\0';//末尾是结束符
row++;
col=0;}}for(int i=row; i >=0;i--){printf("%s", ans[i]);if(i>0)printf(" ");}return0;}
问题 B: 首字母大写
时间限制:1 Sec 内存限制:32 MB
提交:2688 解决:808[提交][状态][讨论版][命题人:外部导入]
题目描述
对一个字符串中的所有单词,如果单词的首字母不是大写字母,则把单词的首字母变成大写字母。
在字符串中,单词之间通过空白符分隔,空白符包括:空格(' ')、制表符('\t')、回车符('\r')、换行符('\n')。
输入
输入一行:待处理的字符串(长度小于100)。
输出
可能有多组测试数据,对于每组数据,
输出一行:转换后的字符串。
样例输入
if so, you already have a google account. you can sign in on the right.
样例输出
If So, You Already Have A Google Account. You Can Sign In On The Right.#include<bits/stdc++.h>usingnamespace std;intmain(){char str[210];while(gets(str)){char a[101][101]={};int row=0,col=0;int len =strlen(str);for(int i=0;i<len;i++){if(str[i]!=' '&&str[i]!='\t'&&str[i]!='\r'&&str[i]!='\n')
a[row][col++]=str[i];else{
a[row][col]='\0';
row++;
col=0;}}for(int i=0;i<=row;i++){if(a[i][0]>='a'){
a[i][0]=a[i][0]-32;}}for(int i=0;i<=row;i++){printf("%s",a[i]);if(i!=row){printf(" ");}}printf("\n");}return0;}
问题 C: 字符串的查找删除
时间限制:1 Sec 内存限制:32 MB
提交:2065 解决:592[提交][状态][讨论版][命题人:外部导入]
题目描述
给定一个短字符串(不含空格),再给定若干字符串,在这些字符串中删除所含有的短字符串。
输入
输入只有1组数据。
输入一个短字符串(不含空格),再输入若干字符串直到文件结束为止。
输出
删除输入的短字符串(不区分大小写)并去掉空格,输出。
样例输入
in
#includeintmain(){printf(" Hi ");}
样例输出
#cludetma(){prtf("Hi");}
提示
注:将字符串中的In、IN、iN、in删除。
#include<bits/stdc++.h>usingnamespace std;intmain(){//字符数组开大一点char str1[1000];gets(str1);int len1 =strlen(str1);char str2[1000];while(gets(str2)!=NULL){int len2 =strlen(str2);for(int i =0;i < len2;i++){//遇到空格直接跳到下一次循环此空格就不打印了if(str2[i]==' '){continue;}//遇到与删除短字符串第一个字符相等时开始比较//删除不区分大小写,所以大小写可采用绝对是32来判断if(str2[i]== str1[0]||fabs(str2[i]-str1[0])==32){int k =0;for(int j = i;j < i + len1;j++){if(str2[j]== str1[k]||fabs(str2[j]-str1[k])==32){
k++;}}// k = len1表示遇到相等的字符串了,直接跳过这个字符串if(k == len1){
i = i + len1 -1;}else{printf("%c",str2[i]);// 如果第一个字符相等但是后面不相等,匹配失败。这个字符还是需要打印的}}else{printf("%c",str2[i]);// 字符与删除短字符串第一个字符不相等那么直接打印}}printf("\n");}return0;}
问题 D: 单词替换
时间限制:1 Sec 内存限制:32 MB
提交:1945 解决:514[提交][状态][讨论版][命题人:外部导入]
题目描述
输入一个字符串,以回车结束(字符串长度<=100)。该字符串由若干个单词组成,单词之间用一个空格隔开,所有单词区分大小写。现需要将其中的某个单词替换成另一个单词,并输出替换之后的字符串。
输入
多组数据。每组数据输入包括3行,
第1行是包含多个单词的字符串 s,
第2行是待替换的单词a,(长度<=100)
第3行是a将被替换的单词b。(长度<=100)
s, a, b 最前面和最后面都没有空格。
输出
每个测试数据输出只有 1 行,
将s中所有单词a替换成b之后的字符串。
样例输入
I love Tian Qin
I
You
样例输出
You love Tian Qin
#include<bits/stdc++.h>usingnamespace std;intmain(){char s[101];while(gets(s)){char a[101],b[101];gets(a);gets(b);int len=strlen(s);int r=0,h=0;char ans[1001][1001];for(int i=0;i<=len;i++)//这里一个坑末尾单词必须加\0{if(s[i]!=' '){
ans[r][h++]=s[i];}if(s[i]==' '||i==len){
ans[r][h]='\0';
r++;
h=0;}}for(int i=0;i<r;i++){if(strcmp(ans[i],a)==0){strcpy(ans[i],b);}printf("%s",ans[i]);if(i!=r-1)printf(" ");}printf("\n");}return0;}
问题 G: 比较字符串
时间限制:1 Sec 内存限制:32 MB
提交:731 解决:446[提交][状态][讨论版][命题人:外部导入]
题目描述
输入两个字符串,比较两字符串的长度大小关系。
输入
输入第一行表示测试用例的个数m,接下来m行每行两个字符串A和B,字符串长度不超过50。
输出
输出m行。若两字符串长度相等则输出A is equal long to B;若A比B长,则输出A is longer than B;否则输出A is shorter than B。
样例输入
2
abc xy
bbb ccc
样例输出
abc is longer than xy
bbb is equal long to ccc
#include<bits/stdc++.h>usingnamespace std;intmain(){int t;while(~scanf("%d",&t)){while(t--){char a[101],b[101];scanf("%s%s",a,b);int len1=strlen(a);int len2=strlen(b);if(len1==len2){printf("%s is equal long to %s\n",a,b);}elseif(len1>len2){printf("%s is longer than %s\n",a,b);}else{printf("%s is shorter than %s\n",a,b);}}}return0;}