《算法笔记》3.6 codeup编号:100000580

  • 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才能读取一行包括空格

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值