c语言学习习题

删除字符串中的子串
题目内容:
输入2个字符串S1和S2,要求删除字符串S1中出现的所有子串S2,即结果字符串中不能包含S2。
提示:输入数据的设计使得不可能出现输出为空的情况。

输入格式:
输入分别给出2个每个不超过80个字符长度的不带空格的非空字符串,对应S1和S2。

输出格式:
在一行中输出删除字符串S1中出现的所有子串S2后的结果字符串。

输入样例:
Thisisatest is

输出样例:
Thatest

/* 只用于 s1 > s2的情况 */ 
#include<stdio.h>
//#include<string.h>

#define LEN 80
int lenth(const char *s1);
void fixed(char *s1, char *s2,char *temp,int len1,int len2);
int main()
{
    char str1[LEN];
    char str2[LEN];
    char temp[LEN];
    scanf("%s %s",&str1,&str2);
    int cnt1,cnt2;
    cnt1 = lenth(str1);
    cnt2 = lenth(str2); // 可直接用strlen()函数 
    fixed(str1,str2,temp,cnt1,cnt2);
    printf("%s",temp);

    return 0;
 } 
 int lenth(const char *s1)
 {
    int cnt = 0;
    while(*s1){
        cnt++;
        s1++;
     }
     return cnt;
 }

 void fixed(char *s1, char *s2,char *temp,int len1,int len2)
 { 
    int num = 0;
    while(num < len1){  //外层循环判断是否遍历整个s1字符串 
    while(*s1 != *s2){  //将于s2不同的写入temp中 
        *temp = *s1;
        temp++;
        s1++;
        num++;
    }
    int cnt = 0; 
    for(int i = 0;i < len2;i++){    //若首字符相同利用cnt来判断整个字符串是否相同 
        if(*s1 == *s2)
            cnt++;
        s1++;
        s2++;
    }
    for(int j = 0;j < len2;j++)
        s2--;
    if(cnt != len2){
        s1 = s1-len2;
        for(int i = 0;i < len2;i++){
            *temp = *s1;
            temp++;
            s1++;
            num++;
        }
    }
    }
 }

总结:根据创建函数传入指针的移动来判断整个字符串是否相同,并将不同部分输入另一个新的字符串中。觉得如果用c的字符串库函数来设计也许会更简洁。。。

无线电台的RS制信号报告是由三两个部分组成的:
R(Readability) 信号可辨度即清晰度.
S(Strength) 信号强度即大小.
其中R位于报告第一位,共分5级,用1—5数字表示.
1—Unreadable
2—Barely readable, occasional words distinguishable
3—Readable with considerable difficulty
4—Readable with practically no difficulty
5—Perfectly readable
报告第二位是S,共分九个级别,用1—9中的一位数字表示
1—Faint signals, barely perceptible
2—Very weak signals
3—Weak signals
4—Fair signals
5—Fairly good signals
6—Good signals
7—Moderately strong signals
8—Strong signals
9—Extremely strong signals
现在,你的程序要读入一个信号报告的数字,然后输出对应的含义。如读到59,则输出:
Extremely strong signals, perfectly readable.
请以字符串数组的方式来实现这个程序。
输入格式:
一个整数,信号报告。整数的十位部分表示可辨度,个位部分表示强度。输入的整数范围是[11,59]中的个位不为0的数字,这个范围外的数字不可能出现在测试数据中。

输出格式:
一句话,表示这个信号报告的意义。按照题目中的文字,先输出表示强度的文字,跟上逗号和空格,然后是表示可辨度的文字,跟上句号。注意可辨度的句子的第一个字母是小写的。注意这里的标点符号都是英文的。

输入样例:
33

输出样例:
Weak signals, readable with considerable difficulty.

#include<stdio.h>
#include<string.h>

#define LENTH 100
#define UN1 "unreadable"
#define BA2 "barely readable, occasional words distinguishable"
#define RE3 "readable with considerable difficulty"
#define RE4 "readable with practically no difficulty"
#define PE5 "perfectly readable"
#define FA1 "Faint signals, barely perceptible"
#define VE2 "Very weak signals"
#define WE3 "Weak signals"
#define FA4 "Fair signals"
#define FA5 "Fairly good signals"
#define GO6 "Good signals"
#define MO7 "Moderately strong signals"
#define ST8 "Strong signals"
#define EX9 "Extremely strong signals"
int main()
{                       //偷懒做法~~
    int number,re,st;
    scanf("%d",&number);
    char read[][LENTH] = {UN1,BA2,RE3,RE4,PE5};
    char stre[][LENTH] = {FA1,VE2,WE3,FA4,FA5,GO6,MO7,ST8,EX9};
    re = number/10-1;
    st = number%10-1;
    printf("%s, %s.",stre[st],read[re]);    
    return 0;
 } 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值