字符数组问题
【问题描述】编写程序将一行英文中指定的字符串删除后输出。注意:查找指定字符串时,大小写无关,而且有可能多次出现。
【输入形式】
先从标准输入中输入一指定字符串(其长度不超过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-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) ;
}
jackz007 发表于 2019-9-24 23:23
楼主测试一下这个代码:
谢谢!结果是对的,但还是有点看不懂能否给个注释呀? 来学习共进步 发表于 2019-9-25 07:07
谢谢!结果是对的,但还是有点看不懂能否给个注释呀?
已经加上了详细注释 jackz007 发表于 2019-9-24 23:23
楼主测试一下这个代码:
学习了
页:
[1]