来学习共进步 发表于 2019-9-24 23:23:21

字符数组问题

【问题描述】

编写程序将一行英文中指定的字符串删除后输出。注意:查找指定字符串时,大小写无关,而且有可能多次出现。

【输入形式】

先从标准输入中输入一指定字符串(其长度不超过20,该字符串中不会出现空格),然后在下一行输入一行英文(长度不超过200),行末有回车换行。

【输出形式】

将输入的英文删除指定字符串后输出到标准输出上,末尾应有一个回车换行;若删除后英文为空,则只输出一个回车换行。

【样例1输入】

th
This second edition of "The C Programming Language" describes C as defined by the ANSI standard. Modern compilers already support most features of the standard.

【样例1输出】

is second edition of "e C Programming Language" describes C as defined by e ANSI standard. Modern compilers already support most features of e standard.

【样例2输入】

This
THIS

【样例2输出】



【样例说明】

样例1中输入的指定字符串为th,由于是大小写无关查找删除,所以下一行英文信息中有四个子串要删除:Th、Th、th和th,删除后其它信息原样输出。
样例2中输入的指定字符串为This,输入的英文信息为THIS,大小写无关查找删除后英文信息为空,所以只输出了一个回车换行。

【评分标准】该题要求编程实现指定字符串的大小写无关查找删除,提交程序文件名为exam2.c或exam2.cpp。

这题目应该怎么去做呀?没有头绪。

jackz007 发表于 2019-9-24 23:23:22

本帖最后由 jackz007 于 2019-9-25 10:32 编辑

      楼主测试一下这个代码:
#include <stdio.h>
#include <string.h>

main(void)
{
      char s1 , s2 , s3                     ;
      int c , k , m , n                                    ;
      fflush(stdin)                                        ;   // 获取键盘输入前,清空键盘缓冲区
      for(k = 0 ; (s1 = getchar()) != '\n' ; k ++)      ;   // 从键盘读取字符输入并存入 s1,直到按下回车键
      s1 = '\0'                                       ;   // 用字符串结束标志覆盖字符串 s1 末尾的回车字符 '\n'
      fflush(stdin)                                        ;   // 获取键盘输入前,清空键盘缓冲区
      for(k = 0 ; (s2 = getchar()) != '\n' ; k ++)      ;   // 从键盘读取字符输入并存入 s2,直到按下回车键
      s2 = '\0'                                       ;   // 用字符串结束标志覆盖字符串 s2 末尾的回车字符 '\n'
      m = strlen(s1)                                       ;   // 取得字符串 s1 长度
      n = strlen(s2)                                       ;   // 取得字符串 s2 长度
      if(n >= m && m > 0) {                                    // 如果 s2 长度大于等于 s1 ,并且,s1 不为空
                c = k = 0                                    ;   // 初始化临时变量
                while(k < n) {                                     // 以循环变量 k 为索引,遍历 s2 中的每个字符
                        if(k <= n - m) {                           // 如果当前 s2 中剩余字符数大于等于 s1
                              if(! strnicmp(s1 , & s2 , m)) { // 从 s2 索引 k 开始,提取 m 个字符,与 s1 忽略大小写比较
                                        k += m               ;   // 如果两个字符串相同,则直接丢弃 s2 中当前 m 个字符
                              } else {
                                        s3 = s2;   // 否则,把 s2 添加到 s3 中
                              }
                        } else {
                              s3 = s2          ;   // s2 中剩余字符少于 s1,直接把 s2 添加到 s3
                        }
                }
                s3 = '\0'                                 ;   // 最后,为 s3 添加字符串结束标志
      }
      printf("%s\n" , s3)                                  ;
}

来学习共进步 发表于 2019-9-25 07:07:22

jackz007 发表于 2019-9-24 23:23
楼主测试一下这个代码:

谢谢!结果是对的,但还是有点看不懂能否给个注释呀?

jackz007 发表于 2019-9-25 11:29:42

来学习共进步 发表于 2019-9-25 07:07
谢谢!结果是对的,但还是有点看不懂能否给个注释呀?

      已经加上了详细注释

yixinwenxin 发表于 2019-9-25 22:35:22

jackz007 发表于 2019-9-24 23:23
楼主测试一下这个代码:

学习了
页: [1]
查看完整版本: 字符数组问题