|
发表于 2019-9-24 23:23:22
|
显示全部楼层
本楼为最佳答案
本帖最后由 jackz007 于 2019-9-25 10:32 编辑
楼主测试一下这个代码:
- #include <stdio.h>
- #include <string.h>
- main(void)
- {
- char s1[256] , s2[256] , s3[256] ;
- int c , k , m , n ;
- fflush(stdin) ; // 获取键盘输入前,清空键盘缓冲区
- for(k = 0 ; (s1[k] = getchar()) != '\n' ; k ++) ; // 从键盘读取字符输入并存入 s1,直到按下回车键
- s1[k] = '\0' ; // 用字符串结束标志覆盖字符串 s1 末尾的回车字符 '\n'
- fflush(stdin) ; // 获取键盘输入前,清空键盘缓冲区
- for(k = 0 ; (s2[k] = getchar()) != '\n' ; k ++) ; // 从键盘读取字符输入并存入 s2,直到按下回车键
- s2[k] = '\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[k] , m)) { // 从 s2 索引 k 开始,提取 m 个字符,与 s1 忽略大小写比较
- k += m ; // 如果两个字符串相同,则直接丢弃 s2 中当前 m 个字符
- } else {
- s3[c ++] = s2[k ++] ; // 否则,把 s2[k] 添加到 s3 中
- }
- } else {
- s3[c ++] = s2[k ++] ; // s2 中剩余字符少于 s1,直接把 s2[k] 添加到 s3
- }
- }
- s3[c] = '\0' ; // 最后,为 s3 添加字符串结束标志
- }
- printf("%s\n" , s3) ;
- }
复制代码 |
|