7-1 sdut-C语言实验-字符编码
请将一串长度最长为5的纯字母文本译成一个密码,密码规律如下:用原来的字母后面的第4个字母代替原来的字母。如C用G代替(如果该字母没后面没有第4个字母可代替,则需从26字母表中的首字母开始代替,比如:W用A代替,Z用D代替),最后得到的文本即为密码。
输入格式:
输入一串文本,长度固定为5。
输出格式:
输出对应的密码。格式为:
password is 密码
输入样例:
China
输出样例:
在这里给出相应的输出。例如:
password is Glmre
int main()
{
int i,len;
char ch[50];
gets(ch);
len=strlen(ch);
for(i=0;i<len;i++){
if(ch[i]>='a'&&ch[i]<'w'||ch[i]>='A'&&ch[i]<'W')
ch[i]=ch[i]+4;
else
ch[i]=ch[i]-22;
}
printf("password is %s",ch);
return 0;
}
7-2 sdut - C语言实验-保留字母
编一个程序,输入一个允许带空格的字符串,将组成字符串的所有非英文字母的字符删除后输出。
输入格式:
一个字符串,长度不超过80个字符。
输出格式:
删掉非英文字母后的字符串。
输入样例:
abc123+xyz.5
输出样例:
在这里给出相应的输出。例如:
abcxyz
#include <stdio.h>
#include <string.h>
int main()
{
char str[88];
gets(str);
int len=strlen(str);
for(int i=0;i<len;i++){
if((str[i]>='a'&&str[i]<='z')||(str[i]>='A'&&str[i]<='Z')){
printf("%c",str[i]);
}
}
printf("\n");
return 0;
}
7-3 sdut-C语言实验- 大小写转换
输入一字符串,请把一串字符中的小写字母变成大写字符,大写字母变成小写字母,其他的保持不变。
输入格式:
输入有多组。
每组输入一个字符串,长度不大于80,不包含空格。
输出格式:
输出转换后的字符串
输入样例:
A*
B+
输出样例:
在这里给出相应的输出。例如:
a*
b+
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main()
{
char a[81];
int n,i;
while(gets(a)!=NULL){
n=strlen(a);
for(i=0;i<n;i++){
if(a[i]<='z'&&a[i]>='a')a[i]=a[i]-32;
else if(a[i]<='Z'&&a[i]>='A')a[i]=a[i]+32;
}
puts(a);
}
return 0;
}
7-4 sdut-C语言实验- 字符串分割
输入一个字符串,要求把这个字符串按照某个分隔符来分割成若干个字符串输出。
输入格式:
输入数据有多组(数据组数不超过 100),到 EOF 结束。
每组数据输入一行,格式为 "s c",其中 s 为一个不含空格且长度不超过 1000 的字符串,表示待分割的字符串;c 为一个不是空格的字符,表示分隔符。
输入数据保证在待分割的字符串中,分隔符至少出现一次且不会出现在字符串开头或末尾,并且不会出现连续多个分隔符的情况。
输出格式:
对于每组数据,输出分割后的字符串,每个字符串占一行。
输入样例:
123,DE ,
0123.a,/45/6.8 /
输出样例:
123
DE
0123.a,
45
6.8
#include<stdio.h>
#include<string.h>
int main()
{
char str[1001],c;
while(scanf("%s %c\n",str,&c)!=EOF){
int t;t=strlen(str);
for(int i=0;i<t;i++){
if(str[i]!=c)printf("%c",str[i]);
else printf("\n");
}
printf("\n");
}
return 0;
}
7-5 sdut- C语言实验——删除指定字符
从键盘输入一个字符串给str和一个字符给c,删除str中的所有字符c并输出删除后的字符串str。
输入格式:
第一行是一个字符串,不超过100个字符;
第二行是一个字符。
输出格式:
删除指定字符后的字符串。
输入样例:
在这里给出一组输入。例如:
sdf$$$sdf$$
$
输出样例:
在这里给出相应的输出。例如:
sdfsdf
#include<stdio.h>
#include<string.h>
int main()
{
char str[101],c;
gets(str);
scanf("%c",&c);
int len;len=strlen(str);
for(int i=0;i<len;i++){
if(str[i]!=c)printf("%c",str[i]);
}
return 0;
}
7-6 sdut-C语言实验- 全字母句
全字母句 (pangram) 指包含字母表中全部 26 种英文字母(不区分大小写)的句子,其常被用于展示英文字体的显示效果。
输入多个句子,判断哪些句子是全字母句。
输入格式:
输入数据有多组(数据组数不超过 100),到 EOF 结束。
每组数据包含一行长度不超过 100 的字符串。
输出格式:
对于每组数据,输出一行。
如果是全字母句则输出 "Yes",否则输出 "No"(不包括引号)。
输入样例:
The quick brown fox jumps over the lazy dog.
The 6th ACM Funny Programming For/While Contest
输出样例:
Yes
No
#include<stdio.h>
#include<string.h>
int main()
{
char a[101];int i,n;
while(gets(a)!=NULL){
int b[26]={0},count=0;
n=strlen(a);
for(i=0;i<n;i++){
if(a[i]>='A'&&a[i]<='Z')a[i]=a[i]+32;
b[a[i]-'a']++;
}
for(int i=0;i<26;i++){
if(b[i]!=0)count++;
}
if(count==26)printf("Yes\n");
else printf("No\n");
}
return 0;
}
7-7 sdut-C语言实验- 字符统计1
给出一串字符,要求统计出里面的字母、数字、空格以及其他字符的个数。
字母:A, B, ..., Z、a, b, ..., z组成
数字:0, 1, ..., 9
空格:" "(不包括引号)
剩下的可打印字符全为其他字符。
输入格式:
测试数据有多组。
每组数据为一行(长度不超过100000)。
数据至文件结束(EOF)为止。
输出格式:
每组输入对应一行输出。
包括四个整数a b c d,分别代表字母、数字、空格和其他字符的个数。
输入样例:
A0 ,
输出样例:
在这里给出相应的输出。例如:
1 1 1 1
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main()
{
int n,i;
char a[100003];
while(gets(a)!=NULL)
{
int a1 = 0,a2 = 0,a3 = 0,a4 = 0;
n = strlen(a);
for(i=0;i<n;i++)
{
if((a[i]<='z'&&a[i]>='a')||(a[i]<='Z'&&a[i]>='A'))
a1++;
else if(a[i]<='9'&&a[i]>='0')
a2++;
else if(a[i]==' ')
a3++;
else a4++;
}
printf("%d %d %d %d\n",a1,a2,a3,a4);
}return 0;
}
7-8 sdut-C语言实验- 字符统计2
输入英文句子,输出该句子中除了空格外出现次数最多的字符及其出现的次数。
输入格式:
输入数据包含多个测试实例,每个测试实例是一个长度不超过100的英文句子,占一行。
输出格式:
逐行输出每个句子中出现次数最多的字符及其出现的次数(如果有多个字符的次数相同,只输出ASCII码最小的字符)。
输入样例:
I am a student
a good programming problem
ABCD abcd ABCD abcd
输出样例:
在这里给出相应的输出。例如:
a 2
o 4
A 2
#include<stdio.h>
#include<string.h>
int main()
{
char a[101];int i,n,k,max=0;
while(gets(a)!=NULL){
int b[58]={0};
max=0;
n=strlen(a);
for(i=0;i<n;i++){
if((a[i]<='z'&&a[i]>='a')||(a[i]<='Z'&&a[i]>='A')){
int k=a[i]-'A';b[k]++;
}
}
for(i=0;i<58;i++){
if(b[i]>max){
max=b[i];k=i;
}
}
printf("%c %d\n",'A'+k,max);
}
return 0;
}
7-9 sdut-C语言实验-虎子查找指定字符
山东理工大学与爱尔兰利莫瑞克大学是中外合作院校,许多优秀的学长学姐通过自己努力获得了留学爱尔兰的机会。
虎子作为优秀的学长已经在爱村求学半年了,也认识了很多国外的同学,他们为了更加熟悉,会玩一个从从某个同学的名字中查找某指定的字符的游戏。
现在请你帮助虎子编写一个程序,从输入的英文名字中查找指定的字符。
输入格式:
输入的第一行是一个待查找的字符。第二行是一个以回车结束的非空字符串(不超过30个字符)。
输出格式:
如果找到,在一行内按照格式“index = 下标”输出该字符在字符串中所对应的最小下标(下标从0开始);否则输出"Not Found"。
输入样例1:
M
Maggie Ma
输出样例1:
在这里给出相应的输出。例如:
index = 0
输入样例2:
a
Ken Thompson
输出样例2:
在这里给出相应的输出。例如:
Not Found
#include<stdio.h>
#include<string.h>
int main()
{
char c,ch[30];
c=getchar();
getchar();
gets(ch);
int i,len,f=0;
len=strlen(ch);
for(i=0;i<len;i++)
if(c==ch[i]){
f=1;
printf("index = %d",i);
break;
}
if(f==0)
printf("Not Found");
return 0;
}
7-10 sdut-C语言实验- 简单字符串比较
请使用字符串比较函数,比较两个字符串的大小,并按要求输出比较后的结果。字符串最长不超过15个字符。
输入两个字符串str1和str2,如果第一个字符串与第二个字符串相等,输出str1=str2,如果第一个字符串大于第二个字符串,输出str1>str2,如果第一个字符串小于第二个字符串,输出str1 < str2。
输入格式:
第1行为第一个字符串。
第2行为第二个字符串。
输出格式:
在一行输出比较后的结果。例如"abc"与"abc"相等,输出为abc=abc,如果"ab"小于"abc”,输出ab < abc。
输入样例:
ab
abc
输出样例:
ab<abc
#include<stdio.h>
#include<string.h>
int main()
{
char str1[16],str2[16];
scanf("%s %s",str1,str2);
char i;
i=strcmp(str1,str2);
if(i<0)printf("%s<%s",str1,str2);
if(i==0)printf("%s=%s",str1,str2);
if(i>0)printf("%s>%s",str1,str2);
return 0;
}
7-11 sdut-C语言实验- 找老乡
新的学年开始了,学校又迎来了一批朝气蓬勃的大一新生。虎子很想认识新来的老乡,于是他拿到了计算机学院大一新生的名单,上面有n个人的信息(姓名和地址),虎子想知道有多少人是他的老乡以及老乡的名字。
输入格式:
多组输入,每组的第一行是一个整数n(1<=n<=100),表示名单上人的数量。
接下来一行有一个字符串表示LeiQ的地址(1<=len<=20)
接下来n行,每行两个字符串,第一个是姓名,第二个是地址。
输出格式:
先输出老乡的名字(按照输入的顺序),最后输出老乡的人数。
如果没有找到老乡,输出:Sorry.
输入样例:
4
Laiyang
Xiaoming Laiyang
Xiaohong Heze
Xiaohuang Laiwu
Xiaoguang Laiyang
输出样例:
Xiaoming
Xiaoguang
2
#include<stdio.h>
#include<string.h>
int main()
{
int n,i;
char ch[20];
int number;
while(~scanf("%d\n",&n)){
char xh[41];
gets(ch);
number=0;
for(i=0;i<n;i++){
gets(xh);
if(strstr(xh,ch)!=NULL){
strtok(xh," ");
printf("%s\n",xh);
number++;
}
}
if(number==0)printf("Sorry.\n");
else printf("%d\n",number);
}
return 0;
}
7-12 sdut-C语言实验- 虎子认识新朋友之字符串排序
虎子寒假加入了一个实验室,认识了3个新同学,他决定将同学的名字按字母顺序存储到自己的电子通讯录上。
你知道如何编程实现吗?
请编程实现:输入3个字符串,按字典序从小到大进行排序。
输入格式:
输入数据有一行,分别为3个字符串,用空格分隔,每个字符串长度不超过100。
输出格式:
输出排序后的三个字符串,用空格分隔。
输入样例:
abcd cdef bcde
输出样例:
abcd bcde cdef
#include <stdio.h>
#include<string.h>
int main()
{
char a[100],b[100],c[100],t[100]; //a b c为输入数组 c为临时数组
scanf("%s %s %s",a,b,c);
if(strcmp(a,b)>0) {
strcpy(t,a);
strcpy(a,b);
strcpy(b,t);
}
if(strcmp(b,c)>0) {
strcpy(t,b);
strcpy(b,c);
strcpy(c,t);
}
if(strcmp(a,b)>0) {
strcpy(t,a);
strcpy(a,b);
strcpy(b,t);
}
printf("%s %s %s",a,b,c);
return 0;
}
7-13 sdut-C语言实验- 简单字符串排序
从键盘输入10个学生的姓名和成绩,请按字典序排列学生的姓名并输出(姓名和成绩对应关系保持不变)。
输入格式:
输入共11行,前10行每行是一个学生的姓名,最后一行是10个用空格分开的整数表示对应的10个学生成绩。(姓名大小不超过20个字符)
输出格式:
输出姓名按字典序排列后的学生姓名和成绩,共10行,每个学生的姓名和成绩占一行,姓名和成绩间用逗号分开。
输入样例:
在这里给出一组输入。例如:
Bush
White
Mark
Jean
Black
Wood
Jenny
Frank
Bill
Smith
78 85 96 65 46 83 77 88 54 98
输出样例:
在这里给出相应的输出。例如:
Bill,54
Black,46
Bush,78
Frank,88
Jean,65
Jenny,77
Mark,96
Smith,98
White,85
Wood,83
#include <stdio.h>
#include <stdlib.h>
int main()
{
int i,j,b[10],t;//十个成绩;成绩
char a[10][20],c[20];//十个名字,十行;名字
memset(a,0,sizeof(a));
memset(b,0,sizeof(b));
memset(c,0,sizeof(c));
for(i=0;i<10;i++)
{
scanf("%s",a[i]);//输入十个名字
}
for(i=0;i<10;i++) {
scanf("%d",&b[i]);//输入十个成绩
}
for(j=0;j<9;j++) {
for(i=0;i<9;i++) {
if(strcmp(a[i],a[i+1])>0) {
strcpy(c,a[i]);
strcpy(a[i],a[i+1]);
strcpy(a[i+1],c);
t=b[i];
b[i]=b[i+1];
b[i+1]=t;
}
}
}
for(i=0;i<10;i++) {
printf("%s,%d\n",a[i],b[i]);
}
return 0;
}
7-14 英文单词排序
本题要求编写程序,输入若干英文单词,对这些单词按长度从小到大排序后输出。如果长度相同,按照输入的顺序不变。
输入格式:
输入为若干英文单词,每行一个,以#
作为输入结束标志。其中英文单词总数不超过20个,英文单词为长度小于10的仅由小写英文字母组成的字符串。
输出格式:
输出为排序后的结果,每个单词后面都额外输出一个空格。
输入样例:
blue
red
yellow
green
purple
#
输出样例:
red blue green yellow purple
#include<stdio.h>
#include<string.h>
int main()
{
int len,i,j,k=0;
char s[26][15],t[15]={'0'};
while(1){
scanf("%s",s[k]);
if(s[k][0]=='#'){
break;
}
k++;
}
s[k][0]='\0';
for(i=0;i<k;i++)
for(j=0;j<k-i;j++){
if(strlen(s[j])>strlen(s[j+1]))
{
strcpy(t,s[j]);
strcpy(s[j],s[j+1]);
strcpy(s[j+1],t);
}
}
for(i=1;i<=k;i++)
{
printf("%s ",s[i]);
}
return 0;
}
7-15 倒数第N个字符串
给定一个完全由小写英文字母组成的字符串等差递增序列,该序列中的每个字符串的长度固定为 L,从 L 个 a 开始,以 1 为步长递增。例如当 L 为 3 时,序列为 { aaa, aab, aac, ..., aaz, aba, abb, ..., abz, ..., zzz }。这个序列的倒数第27个字符串就是 zyz。对于任意给定的 L,本题要求你给出对应序列倒数第 N 个字符串。
输入格式:
输入在一行中给出两个正整数 L(2 ≤ L ≤ 6)和 N(≤105)。
输出格式:
在一行中输出对应序列倒数第 N 个字符串。题目保证这个字符串是存在的。
输入样例:
3 7417
输出样例:
pat
#include <stdio.h>
#include<math.h>
int main(){
int a, m = 26,i,n;
scanf("%d %d",&n,&a);
char s[n];
m = pow(m,n);
a=m-a;
for(i=0;i<n;i++){
s[i] = 'a'+a%26;
a/=26;
}
for(i=n-1;i>=0;i--){
printf("%c",s[i]);
}
}