- Problem A
问题 | 字符串连接 |
描述 | 不借用任何字符串库函数实现无冗余地接受两个字符串,然后把它们无冗余的连接起来。 |
输入 | 每一行包括两个字符串,长度不超过100。 |
输出 | 可能有多组测试数据,对于每组数据, 不借用任何字符串库函数实现无冗余地接受两个字符串,然后把它们无冗余的连接起来。 输出连接后的字符串。 |
、
#include<stdio.h>//此处我觉得只要连续输入两个字符串就能AC结果证明确实如此
int main(){
char str1[211],str2[101];
while(scanf("%s%s",str1,str2)!=EOF){
printf("%s%s\n",str1,str2);
}
return 0;
}
- Problem B
问题 | 首字母大写 |
描述 | 对一个字符串中的所有单词,如果单词的首字母不是大写字母,则把单词的首字母变成大写字母。 在字符串中,单词之间通过空白符分隔,空白符包括:空格(' ')、制表符('\t')、回车符('\r')、换行符('\n')。 |
输入 | 输入一行:待处理的字符串(长度小于100)。 |
输出 | 可能有多组测试数据,对于每组数据, 输出一行:转换后的字符串。 |
、
#include<iostream>
#include<cstdio>
using namespace std;
int main()
{
char a[100];
while(cin.getline(a,102))
{
int i=0;
if(a[i]>='a'&&a[i]<='z')
{
a[i]=a[i]-32;
}
for(i=1;a[i]!='\0';i++)
{
if(a[i]==' '||a[i]=='\t'||a[i]=='\r')
{
if(a[i+1]>='a'&&a[i+1]<='z')
{
a[i+1]=a[i+1]-32;
}
}
}
printf("%s\n",a);
}
return 0;
}
- Problem C
问题 | 字符串的查找删除 |
描述 | 给定一个短字符串(不含空格),再给定若干字符串,在这些字符串中删除所含有的短字符串。 |
输入 | 输入只有1组数据。 输入一个短字符串(不含空格),再输入若干字符串直到文件结束为止。 |
输出 | 删除输入的短字符串(不区分大小写)并去掉空格,输出。 |
、
#include<stdio.h>//使用C编译
#include<string.h>
#include<math.h>
int main(){
char ch[100],str[500];
scanf("%s",ch);
getchar();
int len=strlen(ch);
while(gets(str)){
int len1=strlen(str);
int i,k,j;
for(i=0;i<len1;i++){
if(fabs(str[i]-ch[0])==0||fabs(str[i]-ch[0])==32){
int m=0;
k=0;
while(k<len){
if(fabs(str[i]-ch[k])==0||fabs(str[i]-ch[k])==32){
i++;
k++;
m++;
}else{
break;
}
}
if(k==len)
i--;
else{
for(j=0;j<m;j++)
i--;
printf("%c",str[i]);
}
}
else{
if(str[i]!=' '){
printf("%c",str[i]);
}
}
}
printf("\n");
}
return 0;
}
- Problem D
问题 | 单词替换 |
描述 | 输入一个字符串,以回车结束(字符串长度<=100)。该字符串由若干个单词组成,单词之间用一个空格隔开,所有单词区分大小写。现需要将其中的某个单词替换成另一个单词,并输出替换之后的字符串。 |
输入 | 多组数据。每组数据输入包括3行, 第1行是包含多个单词的字符串 s, 第2行是待替换的单词a,(长度<=100) 第3行是a将被替换的单词b。(长度<=100) s, a, b 最前面和最后面都没有空格。 |
输出 | 每个测试数据输出只有 1 行, 将s中所有单词a替换成b之后的字符串。 |
、
#include<stdio.h>
#include<string.h>
int main()
{
char s[1001];
while(gets(s)!=NULL)
{
char a[1001], b[1001];
char ans[1001][1001],r=0,h=0;//r为行, h为列
for(int i=0;i<=strlen(s); i++)
{
if(s[i]!=' ')
ans[r][h++] = s[i];
if(s[i]==' '||i==strlen(s))
{
ans[r][h]='\0';
r++;
// printf("r = %d, %s\n",r, ans[r-1]);
h=0;
}
}
gets(a);
gets(b);
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(" ");
else
printf("\n");
}
}
}
- Problem E
问题 | 字符串去特定字符 |
描述 | 输入字符串s和字符c,要求去掉s中所有的c字符,并输出结果。 |
输入 | 测试数据有多组,每组输入字符串s和字符c。 |
输出 | 对于每组输入,输出去除c字符后的结果。 |
#include<stdio.h>
#include<string.h>
int main(){
char q[10000];
while(gets(q)){
char c;
scanf("%c",&c);
int len=strlen(q);
for(int i=0;i<len;i++){
if(c==q[i]);
else printf("%c",q[i]);
}
printf("\n");
getchar();
}
return 0;
}
- Problem F
问题 | 数组逆置 |
描述 | 输入一个字符串,长度小于等于200,然后将数组逆置输出。 |
输入 | 测试数据有多组,每组输入一个字符串。 |
输出 | 对于每组输入,请输出逆置后的结果。 |
#include<stdio.h>
#include<string.h>
int main(){
char ch[201];
while(gets(ch)){
int len=strlen(ch);
for(int i=len-1;i>=0;i--){
printf("%c",ch[i]);
}
printf("\n");
}
return 0;
}
- Problem G
问题 | 比较字符串 |
描述 | 输入两个字符串,比较两字符串的长度大小关系。 |
输入 | 输入第一行表示测试用例的个数m,接下来m行每行两个字符串A和B,字符串长度不超过50。 |
输出 | 输出m行。若两字符串长度相等则输出A is equal long to B;若A比B长,则输出A is longer than B;否则输出A is shorter than B。 |
#include<stdio.h>
#include<string.h>
int main(){
int T;
scanf("%d",&T);
while(T--){
char A[51],B[51];
scanf("%s%s",A,B);
int lenA=strlen(A);
int lenB=strlen(B);
if(lenA==lenB)printf("%s is equal long to %s\n",A,B);
else if(lenA>lenB)printf("%s is longer than %s\n",A,B);
else if(lenA<lenB)printf("%s is shorter than %s\n",A,B);
getchar();
}
return 0;
}
- Problem H
问题 | 编排字符串 |
描述 | 请输入字符串,最多输入4 个字符串,要求后输入的字符串排在前面,例如 输入:EricZ 输出:1=EricZ 输入:David 输出:1=David 2=EricZ 输入:Peter 输出:1=Peter 2=David 3=EricZ 输入:Alan 输出:1=Alan 2=Peter 3=David 4=EricZ 输入:Jane 输出:1=Jane 2=Alan 3=Peter 4=David |
输入 | 第一行为字符串个数m,接下来m行每行一个字符床,m不超过100,每个字符床长度不超过20。 |
输出 | 输出m行,每行按照样例格式输出,注意用一个空格隔开。 |
#include<stdio.h>
int main(){
char m[101][21];
int i=0;
int num;
scanf("%d",&num);
getchar();
while(num--){
scanf("%s",m[i]);
getchar();
i++;
if(i>=4){
for(int t=0;t<4;t++){
printf("%d=%s",t+1,m[i-t-1]);
if(t!=3)printf(" ");
else printf("\n");
}
}
else{
for(int t=0;t<i;t++){
printf("%d=%s",t+1,m[i-t-1]);
if(t!=i-1)printf(" ");
else printf("\n");
}
}
}
return 0;
}
- Problem I
问题 | 【字符串】回文串 |
描述 | 读入一串字符,判断是否是回文串。“回文串”是一个正读和反读都一样的字符串,比如“level”或者“noon”等等就是回文串。 |
输入 | 一行字符串,长度不超过255。 |
输出 | 如果是回文串,输出“YES”,否则输出“NO”。 |
结果:注意区分C和C++的编译器,现在oj上已经不支持c++_使用gets了,要使用getline才能读取一行包括空格