sdut oj 实验9- 字符串的应用

A - C语言实验——字符编码

Description

请将一串长度为5的纯字母文本译成一个密码,密码规律如下:用原来的字母后面的第4个字母代替原来的字母。如C用G代替(文本中不存在W/w、X/x、Y/y、Z/z等字母),最后得到的文本即为密码。

Input

输入一串文本,长度固定为5。

Output

输出对应的密码。格式为:
password is 密码

Sample

Input 

China

Output 

password is Glmre
#include
#include
int main()
{
    int i;
    char a[10],b[10];
    gets(a);
    for(i = 0; i < 5; i++){
        b[i] = a[i] + 4;
    }
    printf("password is ");// 只输出一次
    for(i = 0; i < 5; i++){
        printf("%c",b[i]);
    }
    return 0;
}

B - C语言实验——保留字母

Description

编一个程序,输入一个字符串,将组成字符串的所有非英文字母的字符删除后输出。

Input

一个字符串,长度不超过80个字符。

Output

删掉非英文字母后的字符串。

Sample

Input 

abc123+xyz.5

Output 

abcxyz
#include
#include
int main()
{
    int i,j = 0;
    char a[90],b[90];
    gets(a);
    for(i=0; a[i]!='\0'; i++){
        if((a[i]>='a' && a[i]<='z') || (a[i]>='A' && a[i]<='Z')){
          b[j++]=a[i];
        }
    }
    for(i=0; i

C - C语言实验——大小写转换

Description

把一个字符串里所有的大写字母换成小写字母,小写字母换成大写字母。其他字符保持不变。

Input

输入为一行字符串,其中不含空格。长度不超过80个字符。

Output

输出转换好的字符串。

Sample

Input 

ABCD123efgh

Output 

abcd123EFGH
#include
#include
int main()
{
    int i,len;
    char a[90],b[90];
    gets(a);
    len = strlen(a);
    for(i = 0; i < len; i++){
        if(a[i] >= 'A' && a[i] <= 'Z'){
            a[i] = a[i] + 32;
        }
        else if(a[i] >= 'a' && a[i] <= 'z'){
            a[i] = a[i] - 32;
        }
    }
    printf("%s",a);
    return 0;
}

**ascii码:A:65   Z:90

                a:97    z:122

                0:48      9:57

D - 字符串分割

Description

bLue 获得了一个字符串,现在他要把这个字符串按照某个分隔符来分割成若干个字符串,你能帮他实现吗?

Input

输入数据有多组(数据组数不超过 100),到 EOF 结束。

每组数据输入一行,格式为 "s c",其中 s 为一个不含空格且长度不超过 1000 的字符串,表示待分割的字符串;c 为一个不是空格的字符,表示分隔符。

输入数据保证在待分割的字符串中,分隔符至少出现一次且不会出现在字符串开头或末尾,并且不会出现连续多个分隔符的情况。

Output

对于每组数据,输出分割后的字符串,每个字符串占一行。

Sample

Input 

123,DE ,
0123.a,/45/6.8 /

Output 

123
DE
0123.a,
45
6.8
#include
#include
int main()
{
    int i,len;
    char a[1005],c;
    while(~scanf("%s %c",a,&c)){
        len = strlen(a);
        for(i = 0; i < len; i++){
            if(a[i] == c){
                printf("\n");
            }
            else {
                printf("%c",a[i]);
            }
        }
        printf("\n");
    }
    return 0;
}

E - C语言实验——删除指定字符

Description

从键盘输入一个字符串给str和一个字符给c,删除str中的所有字符c并输出删除后的字符串str。

Input

第一行是一个字符串,不超过100个字符;
第二行是一个字符。

Output

删除指定字符后的字符串。

Sample

Input 

sdf$$$sdf$$
$

Output 

sdfsdf

一、
#include
#include
int main()
{
    char str[110],c;
    int i,j,len;
    scanf("%s\n %c",str,&c);
    len = strlen(str);
    for(i = 0; i < len; i++){
        if(str[i] != c){
            printf("%c",str[i]);
        }
    }
    return 0;
}

 二、

#include
#include
char a[100], b[100];
int main()
{
    int len;
    int j = 0, i;
    gets(a);
    len = strlen(a);
    for(i = len - 1; i >= 0; i--){
        b[j++] = a[i];
    }
    printf("%s", b);
    return 0;
}

F - 全字母句

Description

全字母句 (pangram) 指包含字母表中全部 26 种英文字母(不区分大小写)的句子,其常被用于展示英文字体的显示效果。

现在,bLue 得到了很多句子,他想知道哪些句子是全字母句。

Input

输入数据有多组(数据组数不超过 100),到 EOF 结束。

每组数据包含一行长度不超过 100 的字符串。

Output

对于每组数据,输出一行。

如果是全字母句则输出 "Yes",否则输出 "No"(不包括引号)。

Sample

Input 

The quick brown fox jumps over the lazy dog.
The 6th ACM Funny Programming For/While Contest

Output 

Yes
No
#include
#include
int main()
{
    int i,j,count,len;
    char str[105];
    while(gets(str)){
        count = 0;
        len = strlen(str);
        for(i = 0; i < len; i++){
            if(str[i] >= 'a' && str[i] <= 'z'){
                str[i] -= 32;// 全换成大写字母
            }
        }
        for(j = 'A'; j <= 'Z'; j++){
            for(i = 0; i < len; i++){
                if(j == str[i]){
                    count++;
                    break;// 不能忘记!
                }
            }
        }
        if(26 == count){
            printf("Yes\n");
        }
        else
            printf("No\n");
    }
    return 0;
}

**大概思路是把字母全部换成一种形式,即全为大写或全为小写。这样会方便统计(这法子也太聪明了吧!!)

**break语句跳出的是最近的那层循环语句或者switch语句

G - 字符统计2

Description

输入英文句子,输出该句子中除了空格外出现次数最多的字符及其出现的次数。

Input

输入数据包含多个测试实例,每个测试实例是一个长度不超过100的英文句子,占一行。

Output

逐行输出每个句子中出现次数最多的字符及其出现的次数(如果有多个字符的次数相同,只输出ASCII码最小的字符)。

Sample

Input 

I am a student
a good programming problem
ABCD abcd ABCD abcd

Output 

a 2
o 4
A 2

Hint

#include
#include

int main()
{
    int num[200];
    char str[200];//与大小写字母的ASCII码有关。
    int i,len,k;
    int max;
    while(gets(str)){
        int num[200] = {0};//这行代码很重要!!
        k = 0;
        max = 0;
        len = strlen(str);
        for(i = 0; i < len; i++){
            if(str[i] == ' '){
                continue;// 跳过空格
            }
            num[str[i]]++;
        }
        for(i = 0; i < 200; i++){
            if(num[i] > max){
                max = num[i];
                k = i;//此处是记录出现次数最多的字母与所对应的ASCII码。
            }
        }
        printf("%c %d\n",k,max);
    }
    return 0;
}

**em……要注意的点很多,ASCII码、循环内数组初始化、记录次数最多的字母的ASCII码的值……这个题好难啊QAQ

H - 字符统计1

Description

给出一串字符,要求统计出里面的字母、数字、空格以及其他字符的个数。
字母:A, B, ..., Z、a, b, ..., z组成
数字:0, 1, ..., 9 
空格:" "(不包括引号) 
剩下的可打印字符全为其他字符。

Input

测试数据有多组。
每组数据为一行(长度不超过100000)。
数据至文件结束(EOF)为止。

Output

每组输入对应一行输出。
包括四个整数a b c d,分别代表字母、数字、空格和其他字符的个数。

Sample

Input 

A0 ,

Output 

1 1 1 1

Hint

#include
#include
int main()
{
    int i,len;
    int a = 0,b = 0,c = 0,d = 0;
    char str[100005];
    while(gets(str)){
        a = 0;b = 0;c = 0;d = 0;// 每一组都要初始化
        len = strlen(str);
        for(i = 0; i < len; i++){
            if((str[i] >= 'a' && str[i] <= 'z') || (str[i] >= 'A' && str[i] <= 'Z')){
                a++;
            }
            else if(str[i] >= '0' && str[i] <= '9'){
                b++;
            }
            else if(str[i] == ' '){
                c++;
            }
            else {
                d++;
            }
        }
        printf("%d %d %d %d\n",a,b,c,d);
    }
    return 0;
}

**啊啊啊总是忘记在循环内的初始化,,怎么破???

I - 大小写转换

Description

X现在要学习英文以及各种稀奇古怪的字符的了。现在他想把一串字符中的小写字母变成大写字符,大写字母变成小写字母,其他的保持不变。

Input

 输入有多组。

每组输入一个字符串,长度不大于80,不包含空格。

Output

 输出转换后的字符串

Sample

Input 

A*
B+

Output 

a*
b+

Hint

#include
#include
int main()
{
    int i,len;
    char str[85];
    while(gets(str)){
        len = strlen(str);
        for(i = 0; i < len; i++){
            if(str[i] >= 'a' && str[i] <= 'z'){
                str[i] -= 32;
            }
            else if(str[i] >= 'A' && str[i] <= 'Z'){
                str[i] += 32;
            }
            else
                continue;// 跳过非字母的字符
        }
            printf("%s\n",str);
    }
    return 0;
}

J - 简单字符串比较

Description

请使用字符串比较函数,比较两个字符串的大小,并按要求输出比较后的结果。字符串最长不超过15个字符。
输入两个字符串str1和str2,如果第一个字符串与第二个字符串相等,输出str1=str2,如果第一个字符串大于第二个字符串,输出str1>str2,如果第一个字符串小于第二个字符串,输出str1 < str2。

Input

第1行为第一个字符串。
第2行为第二个字符串。

Output

在一行输出比较后的结果。例如"abc"与"abc"相等,输出为abc=abc,如果"ab"小于"abc”,输出ab < abc。

Sample

Input 

ab
abc

Output 

ab 
  

Hint

#include
#include
int main()
{
    char str1[20], str2[20];
    scanf("%s%s",str1, str2);
    int f = strcmp(str1, str2);
    if(f < 0){
        printf("%s<%s",str1, str2);
    }
    else if(f == 0){
        printf("%s=%s",str1, str2);
    }
    else {
        printf("%s>%s",str1, str2);
    }
    return 0;

}

K - 小鑫の日常系列故事(二)——石头剪子布

Description

小鑫在上幼儿园的时候,喜欢跟小伙伴健健玩石头剪子布的游戏 ,你能帮他们判断谁胜谁负么?
 

sdut oj 实验9- 字符串的应用_第1张图片

Input

 输入有两行,每一行都有可能为“Rock”(石头),“Scissors”(剪子),”Cloth”(布)。第一行为小鑫的选择,第二行为健健的选择。

Output

 输出有一行,如果小鑫赢了输出“Win”,输了输出“Lose”,平局输出“Equal”。(输出不包括引号)

Sample

Input 

Rock
Scissors

Output 

Win

Hint

#include
#include
int main()
{
    int n,m;
    char s[20];
    scanf("%s\n",s);
    n=strlen(s);
    scanf("%s",s);
    m=strlen(s);
    if(n==4&&m==5)
        printf("Lose\n");
    else if(n==4&&m==8)
        printf("Win\n");
    else if(n==5&&m==4)
        printf("Win\n");
    else if(n==5&&m==8)
        printf("Lose\n");
    else if(n==8&&m==4)
        printf("Lose\n");
    else if(n==8&&m==5)
        printf("Win\n");
    else if(n==m)
        printf("Equal\n");
    return 0;
}

 **em……应该有别的方法吧

L - 找老乡

Description

新学期开始了,在学校勤学苦练的LeiQ有一天收到一个名单,上面有n个人的信息(姓名和地址),LeiQ知道有多少人是他的老乡以及老乡的名字。

Input

 多组输入,每组的第一行是一个整数n(1<=n<=100),表示名单上人的数量。

接下来一行有一个字符串表示LeiQ的地址(1<=len<=20)

接下来n行,每行两个字符串,第一个是姓名,第二个是地址

Output

 先输出老乡的名字(按照输入的顺序),最后输出老乡的人数。

Sample

Input 

4
Laiyang
Xiaoming Laiyang
Xiaohong Heze
Xiaohuang Laiwu
Xiaoguang Laiyang

Output 

Xiaoming
Xiaoguang
2

Hint

#include
#include
int main()
{
    int num, i, count;
    char str[25], a[100][25], b[100][25];//二维数组
    while(~scanf("%d", &num)){
        count = 0;
        scanf("%s", str);//注意:此处用gets()不行
        for(i = 0; i < num; i++){
            scanf("%s%s", a[i], b[i]);
        }
        for(i = 0; i < num; i++){
            if(strcmp(str,b[i]) == 0){
                printf("%s\n", a[i]);
                count++;
            }
        }
        printf("%d\n",count);
    }
    return 0;
}

**很疑惑真的很疑惑 

下面这个比较好理解

#include
#include
int main()
{
    int num, i, count;
    char str[25], a[25], b[25];
    while(~scanf("%d", &num)){
        count = 0;
        scanf("%s", str);//注意:此处用gets()不行
        for(i = 0; i < num; i++){
            scanf("%s%s", a, b);
            if(strcmp(str,b) == 0){
                printf("%s\n", a);
                count++;
            }
        }
        printf("%d\n",count);
    }
    return 0;
}

**只是输出结果8太一样,但oj平台也能通过。。。。。 

M - 简单字符串排序

Description

从键盘输入10个学生的姓名和成绩,请按字典序排列学生的姓名并输出(姓名和成绩对应关系保持不变)。

Input

输入共11行,前10行每行是一个学生的姓名,最后一行是10个用空格分开的整数表示对应的10个学生成绩。(姓名大小不超过20个字符)

Output

输出姓名按字典序排列后的学生姓名和成绩,共10行,每个学生的姓名和成绩占一行,姓名和成绩间用逗号分开。

Sample

Input 

Bush
White
Mark
Jean
Black
Wood
Jenny
Frank
Bill
Smith
78 85 96 65 46 83 77 88 54 98

Output 

Bill,54
Black,46
Bush,78
Frank,88
Jean,65
Jenny,77
Mark,96
Smith,98
White,85
Wood,83

Hint

#include
#include
using namespace std;
int main()
{
    int t1, i, j, score[10];
    string name[20], t2;
    for(i = 0; i < 10; i++){
        cin >> name[i];
    }
    for(i = 0; i < 10; i++){
        cin >> score[i];
    }
    for(i = 0; i < 9; i++){
        for(j = 0; j < 9 - i; j++){   //冒泡排序
            if(name[j] > name[j+1]){
                t2 = name[j];
                name[j] = name[j+1];
                name[j+1] = t2;

                t1 = score[j];
                score[j] = score[j+1];
                score[j+1] = t1;
            }
        }
    }
    for(i = 0; i < 10; i++){
        cout << name[i] << "," <

**c++string类型的变量可以直接比较字符串大小 ,而c语言中必须用字符串函数

c:

#include 
#include 
#include 
char a[10][21];
char c[21];//用来交换名字(字符串)
int b[10];//用来存放学生成绩
int main()
{
    int i, j;
    int t;
    for(i = 0; i < 10; i++){
        scanf("%s", a[i]);
    }//scanf是以空格为结束标志,若用gets会使名字全部放在一个数组
    for(i = 0; i < 10; i++){
        scanf("%d", &b[i]);
    }
    for(j = 0; j < 9; j++){//外层for用于循环多次交换程序,使字符串排序完全,10个数交换,只需循环9次
        for(i = 0; i < 9; i++){//内层for用于相邻两个字符串交换
            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;
}

N - 简单编码

Description

将一串文本译成密码,密码的规律是:
将原来的小写字母全部翻译成大写字母,大写字母全部翻译成小写字母,数字的翻译规律如下:

0——>9 
1——>8 
2——>7 
3——>6 
4——>5 
5——>4 
6——>3 
7——>2
8——>1 
9——>0 

然后将所有字符的顺序颠倒。

Input

输入一串文本,最大字符个数不超过100。

Output

输出编码后的结果。

Sample

Input 

china

Output 

ANIHC

Hint

#include
#include
int main()
{
    char a[105], t;
    int i;
    scanf("%s", a);
    int len = strlen(a);
    for(i = 0; i < len; i++){
        if(a[i] >= 'a' && a[i] <= 'z'){
            a[i] -= 32;
        }
        else if(a[i] >= 'A' && a[i] <= 'Z'){
            a[i] += 32;
        }
        else if(a[i] >= '0' && a[i] <= '9'){
            a[i] = 105 - a[i];
        }
    }
    for(i = 0; i < len / 2; i++){
        t = a[i];
        a[i] = a[len - 1 -i];//时刻牢记数组下标从0开始的!!
        a[len - 1 - i] = t;
    }
    printf("%s", a);
    return 0;
}

二:

#include
#include
int main()
{
    char a[105], t;
    int i;
    scanf("%s", a);
    int len = strlen(a);
    for(i = 0; i < len; i++){
        if(a[i] >= 'a' && a[i] <= 'z'){
            a[i] -= 32;
        }
        else if(a[i] >= 'A' && a[i] <= 'Z'){
            a[i] += 32;
        }
        else if(a[i] >= '0' && a[i] <= '9'){
            a[i] = 105 - a[i];
        }
    }
    for(int i = len - 1; i >= 0; i--){
        printf("%c", a[i]);
    }
    return 0;
}

O - 编码

Description

给你一个由大写字母组成的组成的字符串,你可以用如下规则对其进行编码:

1、 包含K个相同字母的连续字符串可以用KX表示,其中X是相同的字母。

2、 如果K为1,不输出K

Input

 输入有多组,直到文件结束。每组一个字符串,长度为10000以内

Output

 输出编码后的字符串。

Sample

Input 

ABC
ABBCCC

Output 

ABC
A2B3C

Hint

#include
#include
int main()
{
    int i, len;
    char a[10005];
    while(~scanf("%s", a)){
        int k = 1;
        len = strlen(a);
        for(i = 0; i < len; i++){
            if(a[i] == a[i+1]){
                k++;
            }
            else if(k != 1){
                printf("%d%c", k, a[i]);
                k = 1;
            }
            else{
                printf("%c", a[i]);
            }
        }
        printf("\n");
    }
    return 0;
}

**if…else的四种用法1:

if...else语句的四种结构用法_kangshifu007的博客-CSDN博客

P - 字符逆序

Description

将一个字符串str的内容颠倒过来,并输出。str的长度不超过100个字符。

Input

输入包括一行。 
第一行输入的字符串。

Output

输出转换好的逆序字符串。

Sample

Input 

I am a student

Output 

tneduts a ma I

#include
#include
int main()
{
    int i;
    char t, str[105];
    scanf("%[^\n]", str);
    int len = strlen(str);
    for(i = 0; i < len / 2; i++){
        t = str[i];
        str[i] = str[len - 1 - i];
        str[len - 1 - i] = t;
    }
    printf("%s", str);
    return 0;
}

**scanf:

  ① 遇空格、“回车”、“跳格”键。
  ② 遇宽度结束。
  ③ 遇非法输入。

若想用scanf输入空格:scanf("%[^\n]",string) 即可。

**直接用gets(string)输入好像会更方便qwq

二:

#include
#include
char a[100], b[100];
int main()
{
    int len;
    int j = 0, i;
    gets(a);
    len = strlen(a);
    for(i = len - 1; i >= 0; i--){
        b[j++] = a[i];
    }
    printf("%s", b);
    return 0;
}

Q - 回文串判定

Description

输入一串字符(长度小于100),判断该串字符是否是回文串(正序读与逆序读内容相同)。

Input

输入一串字符(长度小于100)。

Output

若该串字符是回文串输出“yes",否则输出”no“。

Sample

Input 

asdfgfdsa

Output 

yes
#include
#include
int main()
{
    int i;
    char str[105];
    gets(str);
    int len = strlen(str);
    for(i = 0; i < len / 2; i++){
        if(str[i] != str[len - 1 - i]){
            break;
        }
    }
    if(i < len / 2){
        printf("no\n");
    }
    else{
        printf("yes\n");
    }
    return 0;
}

 **唉,没那么复杂啦

二:

#include
#include
int main()
{
    int i, f = 1;
    char str[105];
    gets(str);
    int len = strlen(str);
    for(i = 0; i < len / 2; i++){
        if(str[i] != str[len - 1 - i]){
            f = 0;
            break;
        }
    }
    if(!f){
        printf("no\n");
    }
    else{
        printf("yes\n");
    }
    return 0;
}

R - 小鑫の日常系列故事(七)——小纸条

Description

小鑫在高中的时候喜欢上了一个十分漂亮的女孩。那个女孩也很喜欢他,就答应成为他的女朋友。

但是大家都知道高中的生活是忙碌的,除了上课就是上课,有时候可能连课间时间都被老师占用。于是小鑫想出了在上课给女朋友传纸条的方法来表达自己的爱慕。

又但是她与小鑫之间的距离太远,中间必须通过同学来传递纸条。可他们并不想让同学们知道写的什么就想到加密纸条这种方法。方法如下:

他们每天都会约定加密常数n,举个例子,当n=1时,今天写的每一句话中所用的字母都会向后+1,比如:i love you就成了j mpwf zpv ,当然了当是z的时候,+1就等于a。

请你帮他女朋友解密他写的纸条么?

Input

输入为多组,每组为两行。

第一行为n,-50

第二行为一句话,只有小写字母和空格。长度小于10000

Output

 输出解密之后的内容

Sample

Input 

1
j mpwf zpv

Output 

i love you

Hint

#include
#include
int main()
{
    char str[10005];
    int n, i, t;
    while(~scanf("%d", &n)){
        getchar();//作用是吸收'\n'
        gets(str);
        int len = strlen(str);
        for(i = 0; i < len; i++){
            t = 0;
            if(str[i] != ' '){
                t = str[i];
                if(t - n < 'a'){
                    while(t - n < 'a'){
                        t = t + 26;
                    }      //if判断,while循环
                }
                else if(t - n > 'z'){
                    while(t - n > 'z'){
                        t -= 26;
                    }
                }
                str[i] = t;
                str[i] -= n;
            }
        }
        puts(str);
    }
    return 0;
}

**关于getchar():

getchar()的用法_鸶鰰KD的博客-CSDN博客_getchar

S - 简单密码破解

Description

密码是我们生活中非常重要的东东,我们的那么一点不能说的秘密就全靠它了。哇哈哈.
接下来渊子要在密码之上再加一套密码,虽然简单但也安全。
假设渊子原来一个BBS上的密码为zvbo941987,为了方便记忆,他通过一种算法把这个密码变换成YUANzi1987,这个密码是他的名字和出生年份,怎么忘都忘不了,而且可以明目张胆地放在显眼的地方而不被别人知道真正的密码。
他是这么变换的,大家都知道手机上的字母: 1--1, abc--2, def--3, ghi--4, jkl--5, mno--6, pqrs--7, tuv--8 wxyz--9, 0--0,就这么简单,渊子把密码中出现的小写字母都变成对应的数字,数字和其他的符号都不做变换,声明:密码中没有空格,而密码中出现的大写字母则变成小写之后往后移一位,如:X,先边成小写,再往后移一位,不就是y了嘛,简单吧。记住,z往后移是a哦。

Input

输入包括多个测试数据。输入是一个明文,密码长度不超过100个字符,输入直到文件结尾。

Output

输出渊子真正的密文。

Sample

Input 

YUANzi1987

Output 

zvbo941987

Hint

#include
#include
int main()
{
    char str[105];
    int i, t;
    while(~scanf("%s", str)){
        int len = strlen(str);
        for(i = 0; i < len; i++){
            if(str[i] >= 'a' && str[i] <= 'c'){
                str[i] = '2';
            }
            if(str[i] >= 'd' && str[i] <= 'f'){
                str[i] = '3';
            }
            if(str[i] >= 'g' && str[i] <= 'i'){
                str[i] = '4';
            }
            if(str[i] >= 'j' && str[i] <= 'l'){
                str[i] = '5';
            }
            if(str[i] >= 'm' && str[i] <= 'o'){
                str[i] = '6';
            }
            if(str[i] >= 'p' && str[i] <= 's'){
                str[i] = '7';
            }
            if(str[i] >= 't' && str[i] <= 'v'){
                str[i] = '8';
            }
            if(str[i] >= 'w' && str[i] <= 'z'){
                str[i] = '9';
            }
            else if(str[i] >= 'A' && str[i] <= 'Y'){
                str[i] += 33;
            }
            else if(str[i] == 'Z'){
                str[i] = 'a';
            }
        }
        printf("%s\n", str);
    }
    return 0;
}

T - 统计元音

Description

统计每个元音字母在字符串中出现的次数。

Input

输入数据首先包括一个整数n,表示测试实例的个数,然后是n行长度不超过100的字符串。

Output

对于每个测试实例输出5行,格式如下:

a:num1
e:num2
i:num3
o:num4
u:num5

多个测试实例之间由一个空行隔开。

 

Sample

Input 

2
aeiou
my name is ignatius

Output 

a:1
e:1
i:1
o:1
u:1

a:2
e:1
i:3
o:0
u:1
#include
#include
int main()
{
    char str[105];
    int n, i;
    scanf("%d", &n);
    getchar();// 吸收换行符,不能少
    while(n--){
        int n1 = 0, n2 = 0, n3 = 0, n4 = 0, n5 = 0;
            //把getchar放在这里就是错的qaq
        gets(str);
        int len = strlen(str);
        for(i = 0; i < len; i++){
            if(str[i] == 'a'){
                n1++;
            }
            else if(str[i] == 'e'){
                n2++;
            }
            else if(str[i] == 'i'){
                n3++;
            }
            else if(str[i] == 'o'){
                n4++;
            }
            else if(str[i] == 'u'){
                n5++;
            }
        }
        printf("a:%d\n", n1);
        printf("e:%d\n", n2);
        printf("i:%d\n", n3);
        printf("o:%d\n", n4);
        printf("u:%d\n", n5);
        printf("\n");
    }
}

**getchar的作用是接收换行符,在循环外面接收一次就够了

U - C语言实验——单词统计

Description

从键盘输入一行字符(长度小于100),统计其中单词的个数,各单词以空格分隔,且空格数可以是多个。

Input

输入只有一行句子。仅有空格和英文字母构成。

Output

单词的个数。

Sample

Input 

stable marriage  problem Consists     of Matching members

Output 

7
#include
#include
int main()
{
	char a[105];
	int i;
	gets(a);
	int len = strlen(a);
	int num = 0, flag = 0;
	for(i = 0; i < len; i++){
		if(a[i] == ' '){
			flag = 0;
		}
		else if(flag == 0){
			flag = 1;
			num++;
		}
	}
	printf("%d", num);
	return 0;	
} 

**注意:多个连续空格相当于一个空格,单词数+1

V - C语言实验——保留整数

Description

输入一个字符串str1,把其中的连续非数字的字符子串换成一个‘*’,存入字符数组str2 中,所有数字字符也必须依次存入 str2 中。输出str2。

Input

输入为一行字符串str1,其中可能包含空格。字符串长度不超过80个字符。

Output

输出处理好的字符串str2。

Sample

Input 

$Ts!47&*s456  a23* +B9k

Output 

*47*456*23*9*
#include
#include
int main()
{
	char str1[85], str2[85];
	int i, m = 0;
	gets(str1);
	int len = strlen(str1);
	if(str1[0] >= '0' && str1[0] <= '9'){
		str2[m++] = str1[0];
	}// 先判断第一个字符
	else {
		str2[m++] = '*';
	}
	for(i = 1; i < len; i++){
		if(str1[i] >= '0' && str1[i] <='9'){
			str2[m++] = str1[i];
		}
		else {
			if(str2[m-1] != '*'){// 先判断第一个字符的作用体现出来了
				str2[m++] = '*';
			}
		}
	}
	for(i = 0; i < m; i++){
		printf("%c", str2[i]);
	}
	printf("\n");
	return 0;
}

**差之毫厘,谬以千里

W - 字符串排序

Description

输入3个字符串,按字典序从小到大进行排序。

Input

输入数据有一行,分别为3个字符串,用空格分隔,每个字符串长度不超过100。

Output

输出排序后的三个字符串,用空格分隔。

Sample

Input 

abcd cdef bcde

Output 

abcd bcde cdef

Hint

#include
#include
char str[3][105];//是二维数组!
char t[105];
int main()
{
    int i, j;
    for(i = 0; i < 3; i++){
        scanf("%s", str[i]);
    }
    for(i = 0; i < 3; i++){
        for(j = 0; j < 2 - i; j++){ // 冒泡排序
            if(strcmp(str[j], str[j+1]) > 0){
                strcpy(t, str[j]);
                strcpy(str[j], str[j+1]);
                strcpy(str[j+1], t);
            }
        }
    }
    for(i = 0; i < 3; i++){
        printf("%s ", str[i]);
    }
    return 0;
}

 **666学到了,存储多个字符串就要用到二维数组了

X - C语言实验——合法的C标识符

Description

给出一个标识符,请你判断它是否是C语言合法的标识符。

Input

输入一个标识符,长度不超过100。

Output

判断是否合法,如果是输出YES,否则输出NO。

Sample

Input 

123You

Output 

NO

Hint

C语言规定:标识符只能由字母、数字和下划线3种字符组成,且第一个字符必须为字母或下划线。

#include
#include
int main()
{
    char str[110];
    int i, len, flag = 1;
    scanf("%s", str);
    len = strlen(str);
    if((str[0] =='_') || (str[0] >= 'a' && str[0] <= 'z') || (str[0] >= 'A' && str[0] <= 'Z')){
        for(i = 1; i < len; i++){
            if(str[i] =='_' || (str[i] >= 'a' && str[i] <= 'z') || (str[i] >= 'A' && str[i] <= 'Z') || (str[i] >= '0' && str[i] <= '9')){
                flag = 1;
            }
            else{
                flag = 0;
                break;
            }
        }
        if(flag){
            printf("YES");
        }
        else if(!flag){
            printf("NO");
        }
    }
    else{
        printf("NO");
    }
    return 0;
}

**那一行break格外重要!

  break:退出离它最近的一层循环

关于break:break的用法_h1265823的博客-CSDN博客

Y - X的旅游计划

Description

X在最后的几周安心学习,考试有惊无险,so,X和女友就要计划一下放假后的时间了,来一场说走就走的旅行,这是两个人的一致想法,但是究竟去哪里玩,就要好好考虑一下了。

X和他的女友都有一些自己想去的地方,于是X想让大家帮他找一找两个人都想去的地方。

Input

测试案例有多组,每个案例:

第一行输入两个数n,m(n < 100 && m < 100)。X想要去的地方有n个,女友想要去的地方有m个。

之后n行,每行一个字符串(长度小于10)表示X想去的地名。

之后m行,每行一个字符串(长度小于10)表示女友想去的地名。

Output

 

将在n中和在m中都出现过得字符串输出(字典序)。

如果没有相同的字符串,输出”sad!”(不含引号)。

Sample

Input 

2 2
aaa
bbb
aaa
bbb

Output 

aaa
bbb

Hint

#include 
#include 
int main()
{
   int m, n, i, j;
   char a[100][100], b[100][100];
   while(~scanf("%d%d", &n, &m)){
       for(i = 0; i < n; i++){
            scanf("%s", a[i]);
       }
       for(i = 0; i < m; i++){
            scanf("%s", b[i]);
       }
       int f = 0, t = 0;
       char c[100][100];
       for(i = 0; i < n; i++){
           for(j = 0;j < m; j++){
               if(strcmp(a[i], b[j]) == 0){
                    f = 1;
                   strcpy(c[t++], a[i]);
                }
           }
       }
       if(f==1){
           char d[100][100];
           for(i = 0; i < t - 1; i++){
               for(j = 0; j < t - 1 - i; j++){
                   if(strcmp(c[j], c[j+1]) > 0){  //冒泡排序
                       strcpy(d[j], c[j]);
                       strcpy(c[j], c[j+1]);
                       strcpy(c[j+1], d[j]);
                   }
               }
           }
           for(i = 0; i < t; i++){
                printf("%s\n", c[i]);
           }
       }
       else{
            printf("sad!\n");
       }
   }
    return 0;
}

**我觉得字符串好像还可以?

你可能感兴趣的:(SDUT,c语言,开发语言,后端)