A. 按要求输出
-
题目描述
- 首先请实现如下两个函数(要自己写代码完成,不允许直接调用库函数):
-
int myStrLen(char *s);
该函数功能为求字符串s的长度。 -
void myStrConcat(char *string1, char *string2);
该函数的功能为将字符串string2拼接至字符串string1后边。 - 注意:该函数的两个参数,在调用时有可能会指向同一个字符串,函数需要在这种情况下能正确完成指定的功能。
- 主函数要求使用以上两个函数实现如下功能:
-
输入:
第一行为三个整数n(0<n<10),a,b, 第二行为n个整数,后边为n行字符串,每个字符串长度不超过20。 -
输出:
要求首先将第b行字符串拼接至第a行的字符串后再输出。
第一行为n个用单个空格分隔的整数(最后一个数后无空格),为按各字符串的输入次序输出的各字符串的长度。
后边n行为将输入的字符串按输入的第2行给出的顺序依次输出。
输入保证合法且字符串中不包含空格。
输入样例
2 0 1
1 0
Hello
World
输出样例
10 5
World
HelloWorld
#include <stdio.h>
int myStrLen(char *s){
int ret;
for(ret=0;s[ret]!='\0';ret++);
return ret;
}
void myStrConcat(char *dst, char *src){
int start=myStrLen(dst);
int len=myStrLen(src);
for(int i=0;i<len;i++)
dst[i+start]=src[i];
}
int main(){
char str[10][50]={
{
0}};
int order[10]={
0};
int n,a,b;
scanf("%d%d%d",&n,&a,&b);
for(int i=0;i<n;i++)
scanf("%d",&order[i]);
for(int i=0;i<n;i++)
scanf("%s",str[i]);
myStrConcat(str[a],str[b]);
for(int i=0;i<n;i++)
printf("%d ",myStrLen(str[i]));
printf("\n");
for(int i=0;i<n;i++)
printf("%s\n",str[order[i]]);
}
B. 在指定位置插入字符串
-
题目描述
-
输入两个字符串s1,s2和任意字符k,在s1中的指定字符k第一次出现的位置处插入字符s2,构成新的字符串s3,并将s3输出。
(经某同学的举报,补充一句:如果s1中没有k会默认将s2插在s1结尾) -
输入格式:
输入有三行,第一行用gets()输入s1串,第二行用gets()输入s2串,第三行用%c格式输入任意字符k。 -
输出格式:
用puts输出s3字符串。
输入样例
abcd
12
b
输出样例
a12bcd
#include <stdio.h>
#include <string.h>
#define MAX_s1 200
#define MAX_s2 100
void strInsert(char *dst,char*src,char key);
int main(){
char s1[MAX_s1]={
0};
char s2[MAX_s2]={
0};
char k;
gets(s1);
gets(s2);
scanf("%c",&k);
strInsert(s1,s2,k);
puts(s1);
}
void strInsert(char *dst,char*src,char key){
char *p=NULL;
int dstLen=strlen(dst);
int srcLen=strlen(src);
int keyIndex=strlen(dst);
if(p=strchr(dst,key))
keyIndex=p-dst;
for(int i=dstLen+srcLen;i>=keyIndex;i--)
dst[i]=dst[i-srcLen];
for(int i=0;i<srcLen;i++)
dst[i+keyIndex]=src[i];
}
//小清新版
#include <stdio.h>
#include <string.h>
#define LEN 100
int main(){
char s1[LEN],s2[LEN],k;
gets(s1);gets(s2);
scanf("%c",&k);
char *p=NULL;
if(p=strchr(s1,k)){
*p=0;
printf("%s%s",s1,s2);
*p=k;
puts(p);
}else printf("%s%s",s1,s2);
}
C. 括号匹配
-
题目描述
- C语言马上就要期末考试了,小明每天都在紧张地复习着。一天他突然想到一个问题,就是C语言的语法规定括号是要匹配的。那么什么叫括号匹配呢?这个问题似乎小学生都懂,可我们的教材上好像没有明确的说明,老师上课也没讲过。上网一搜,满屏都是括号匹配算法,就是没有人说什么是括号匹配。于是小明就来问教C语言的250老师。250老师说:“这么简单的问题也要来问,括号匹配就是左右括号要成对出现,不能只有一个。”小明于是在纸上写了两个表达式,3)+(2和(5+[3+6)*7],问这两个表达式的括号算匹配吗?250老师“……”。
- 这两个表达式的括号显然是不匹配的。括号不匹配通常有3种情况:
-
1、左右括号次序不正确,如小明写的第一个表达式;
2、左括号多于右括号;
3、右括号多于左括号。现在就请聪明的你帮帮小明写一段用于判断括号是否匹配的C程序。 -
输入格式:
输入的第一行是一个整数t(0<t<20),表示有t组测试用例。后面是t行字符串(为了简化程序,字符串中只包含’{‘和’}'两种字符),每个字符串长度不超过30。 -
输出格式:
t行,每行对应一行输入的字符串,如果该行字符串括号是匹配的则输出yes,否则输出no。
输入样例
2
{}
}{
输出样例
yes
no
#include <stdio.h>
int main(){
int n;
scanf("%d",&n);
for(int i=0;i<n;i++){
char str[35]={
0};
scanf("%s",str);
int l=0,r=0;
for(int i=0;str[i]!='\0';i++){
l+=str[i]=='{';
r+=str[i]=='}';
if(l<r)break;
}
printf(l==r?"yes\n":"no\n");
}
return 0;
}
D. 26进制
-
题目描述
- Saerdna最近在研究数值计算,其中有一个项目涉及了进制转换。已知A对应0,B对应1,Z对应25,BB对应27。你能写一个程序来转换这些数值么?
-
输入:
一串字符,保证输入的字符串只含大写字母,且字符串长度不大于5. -
输出:
对应的值。
输入样例
BB
输出样例
27
#include <stdio.h>
int main(){
char letter[6];
scanf("%s",letter);
int dec=0;
for(int i=0;letter[i]!='\0';i++)
dec=dec*26+letter[i]-'A';
printf("%d",dec);
return 0;
}
E. 明文密码加密
-
题目描述
- 2014年4月8日,openSSL漏洞如一颗核弹在互联网引爆。存储在服务器内存中的明文密码被黑客疯狂下载,再复杂的密码也逃不过明文存储的管理漏洞。你开发了一种简单的加密方法,首先将字符串倒置,再向右循环移动1位(最右侧的字符移动到最左侧)。
-
输入:
一行待加密的字符串,包含大小写字母和数字。字符串长度<=50. -
输出:
按照规则加密后的字符串。
输入样例
123456789XYZ
输出样例
1ZYX98765432
//通用版:
#include <stdio.h>
#include <string.h>
void encrypt(char *plainText,char *cipherText,int shift);
int main(){
char in[55]={
0};
char out[55]={
0};
scanf("%s",in);
encrypt(in,out,1);//shift就是偏移量,本题是1.
puts(out);
return 0;
}
void encrypt(char *plainText,char *cipherText,int shift){
int len=strlen(plainText);
for(int i=0;i<len;i++){
int idx=len-i-1+shift;
while(idx<0)idx+=len;
cipherText[i]=plainText[idx%len];
}
}
//简略版
#include <stdio.h>
#include <string.h>
int main(){
char in[55]={
0};
char out[55]={
0};
scanf("%s",in);
out[0]=in[0];
int len=strlen(in);
for(int i=1;i<len;i++)
out[len-i]=in[i];
puts(out);
return 0;
}
转载:https://blog.csdn.net/qq_28481587/article/details/110670957
查看评论