第1关:字符逆序
任务描述
题目描述:输入一个字符串,输出反序后的字符串。
相关知识(略)
编程要求
请仔细阅读右侧代码,结合相关知识,在Begin-End区域内进行代码补充。
输入
一行字符
输出
逆序后的字符串
测试说明
样例输入:
123456abcdef
样例输出:
fedcba654321
特别注意:样例输出没有进行换行操作
参考答案:
#include<stdio.h>
int main(void)
{
/*********Begin*********/
char a[200];
int i=0,j=0,t=0,k;
scanf("%s",a);
while(a[i]!='\0'){
i++;
j++;
}
for(i=0,k=j-1;i<k;i++,k--){
t=a[i];
a[i]=a[k];
a[k]=t;
}
for(i=0;i<=j;i++)
printf("%c",a[i]);
/*********End**********/
return 0;
}
第2关:字符统计
任务描述
题目描述:对于给定的一个字符串,统计其中数字字符出现的次数。
相关知识(略)
编程要求
请仔细阅读右侧代码,结合相关知识,在Begin-End区域内进行代码补充。
输入
输入数据有多行,第一行是一个整数n,表示测试实例的个数,后面跟着n行,每行包括一个由字母和数字组成的字符串。
输出
对于每个测试实例,输出该串中数值的个数,每个输出占一行。、
测试说明
样例输入:
2
asdfasdf123123asdfasdf
asdf111111111asdfasdfasdf
样例输出:
6
9
参考答案:
#include<stdio.h>
#include<string.h>
int main(void)
{
int n,count,i,k,j,w;
char a[100];
scanf("%d",&n);
w = n;
int b[100]={0};
while(n > 0)
{
count = 0;
scanf("%s",a);
k = strlen(a);
for(i=0; i<k; i++)
{
if(a[i]<='9' && a[i]>='0')
{
count++;
}
}
b[n-1] = count;
n--;
}
for(j=w-1; j>=0; j--)
{
printf("%d", b[j]);
if(j>0)
printf("\n");
}
return 0;
}
第3关:字符插入
任务描述
题目描述:输入两个字符串a和b,将b串中的最大字符插入到a串中最小字符后面。
相关知识(略)
编程要求
请仔细阅读右侧代码,结合相关知识,在Begin-End区域内进行代码补充。
输入
输入一段文字
输出
输入两个字符串a和b。
测试说明
样例输入:
MynameisAmy
MynameisJane
样例输出:
MynameisAymy
提示:
字符串长度不超过100
注意:使用gets()**函数会引起警告并不是报错,只要代码编译正确并不会影响测评结果。
**推荐使用:fgets()函数。
参考答案:
#include<stdio.h>
#include<string.h>
int main()
{
char a[101], b[100];
int i = 0, j = 0, min, max, x, y;
min = 0;
max = 0;
scanf("%s",a);
scanf("%s",b);
x = strlen(a);
y = strlen(b);
for(i=0;i<x;i++){
if(a[i]<a[min])
min=i;
}
for(j=0;j<y;j++){
if(b[j]>b[max])
max=j;
}
for(i=x;i>min;i--){
a[i+1]=a[i];
}
a[min+1]=b[max];
a[x+1]='\0';
printf("%s",a);}
第4关:字符串处理
任务描述
题目描述:编写程序,输入字符串s1和s2以及插入位置f,在字符串s1中的指定位置f处插入字符串s2。如输入"BEIJING", “123”, 3,则输出:“BEI123JING”。
相关知识(略)
编程要求
请仔细阅读右侧代码,结合相关知识,在Begin-End区域内进行代码补充。
输入
第一行和第二行分别输入两个字符串s1和s2,第三行输入插入位置f。
每个字符串的长度不超过100个字符。
输出
输出一行插入后的字符串。
测试说明
样例输入:
BEIJING
123
3
样例输出:
BEI123JING
注意:使用gets()**函数会引起警告并不是报错,只要代码编译正确并不会影响测评结果。
**推荐使用:fgets()函数。
参考答案:
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
int main(void)
{
/*********Begin*********/
char t[100],s[100];
int i,j,pos;
gets(t);
gets(s);
scanf("%d",&pos);
for(i=0;i<strlen(t);i++)
{
printf("%c",t[i]);
if(i+1==pos)
{
for(j=0;j<strlen(s);j++)
printf("%c",s[j]);
}
}
/*********End**********/
return 0;
}
第5关:字符串统计
任务描述
题目描述:输入一段字符(由空格、字母和数字几种组成,保证开头不为空格),里面有若干个字符串,求这些字符串的长度和,并输出最长字符串内容,如果有多个输出最先出现的那个字符串。以stop作为最后输入的字符串。
相关知识(略)
编程要求
请仔细阅读右侧代码,结合相关知识,在Begin-End区域内进行代码补充。
输入
输入一段文字
输出
输入一段字符,以stop作为最后输入的字符串。
测试说明
样例输入:
My name is Amy
My name is Jane
stop
样例输出:
11 name
12 name
提示:
字符串长度不超过100。
注意:使用gets()函数会引起警告,但正确使用不影响测评结果。
推荐使用:fgets()函数。
参考答案:
#include<stdio.h>
#include <string.h>
int main(void)
{
/*********Begin*********/
char a[100];
int i, j, pos = 0;
int str_len, word_len, max_word_len;
while(1) {
str_len = word_len = max_word_len = 0;
fgets(a, 100, stdin);//fgets函数的用法
if (strlen(a) <= 1)//输入的字符只有一个的情况
continue;
if (strlen(a) < 99) //remove '\n'
a[strlen(a)-1] = 0;
if(strncmp(a,"stop", strlen("stop"))==0)
break;
for(i = 0; a[i] !='\0'; i++) {
if(a[i] != ' ') {
word_len++;
str_len++;
continue;
}
if (word_len > max_word_len) {
max_word_len = word_len;
pos = i - word_len;
}
word_len = 0;
}
if (word_len > max_word_len) {
max_word_len = word_len;
pos = i - word_len;
}
printf("%d ", str_len);
for (i = pos; i < pos + max_word_len; i++)
printf("%c", a[i]);
putchar(10);
}
/*********End**********/
return 0;
}
第6关:字符串排序
任务描述
题目描述:输入3行,每行n个字符串,按由小到大的顺序输出
相关知识(略)
编程要求
请仔细阅读右侧代码,结合相关知识,在Begin-End区域内进行代码补充。
输入
3行字符串
输出
按照从小到大输出成3行
测试说明
样例输入:
cde
afg
abc
样例输出:
abc
afg
cde
参考答案:
#include<stdio.h>
#include<string.h>
int main(void)
{
/*********Begin*********/
char a[30],b[30],c[30],max[30];
scanf("%s %s %s",&a,&b,&c);
if(strcmp(a,b)>0)
{
strcpy(max,a);
strcpy(a,b);
strcpy(b,max);
}
if(strcmp(a,c)>0)
{
strcpy(max,a);
strcpy(a,c);
strcpy(c,max);
}
if(strcmp(b,c)>0)
{
strcpy(max,b);
strcpy(b,c);
strcpy(c,max);
}
printf("%s\n%s\n%s",a,b,c);
/*********End**********/
return 0;
}