一个看似简单的搜寻关键词的程序,却令我痛不欲生

哈利_蜘蛛侠 2014-02-13 08:43:15
就是从一个文本中搜寻一个关键词,然后将关键词替换成另一个词。

比如说,关键词是his和her
要将它替换成his or her

这是《Problem Solving with C++》上的一道练习题,以前看的时候认为这个太简单了,不值得一做,然后当我决定“玩玩”的时候,却发现这个成了我噩梦的开始!接下来的两天的时间我都花在了这个问题上面,结果只让问题变得更加扑朔迷离!我曾经数度陷入绝望状态:天哪,这么个小程序就这么难编,可咋整啊?

具体有什么问题呢?且听我细细道来:
1、如何找到这个可疑的关键词。我的思路是,首先将文本的每一行读入一个名叫perline大的string中,然后审查perline的每一个元素,看看是不是空行。如果是的话,那么用
string suspect = perline(begin + index, begin + index +5);
生成一个可疑的关键词suspect,其中begin指向perline的首项,而index是perline中那个空格的下标。之所以是5,是因为关键词的前面和后面都有一个空格。

2、检查这个可疑的关键词是不是关键词。这个比较好做。

3、如果不是关键词,那么
++index;
否则替换关键词并且
index += 5;

4、……

听上去很简单是吧?可是我实际操作的时候真的要死的心都有了!随便一写就弄出了8个嵌套语句!我都要看哭了。难道这个问题真的这么复杂?关键是你找到his或者her的时候,你还要检查这个his(her)是单独出现的his(her)还是实际上是his or her的一部分……

各位大神,有什么好建议吗?不一定针对这个问题。就是当你写程序的时候,如果出现了N多的嵌套的话,应该怎么解决呢?
...全文
175 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
幻夢之葉 2014-02-14
  • 打赏
  • 举报
回复
好吧,我不写了!见赵老师的代码,C字符串! 过程大概相同,查找-》替换!!
幻夢之葉 2014-02-14
  • 打赏
  • 举报
回复
这个不难吧! 找到his索引 用string类的substr返回substr(index,10),判断是否=="his or her" 是则跳过,否则使用replace替换字符串! 貌似string都给有现成的方法,你就不需要自己写判断啊插入之类的代码了! 你只是做一个循环判断关键字取得索引,然后if...else,感觉嵌套应该不超过三层! 我写个代码试试!
赵4老师 2014-02-14
  • 打赏
  • 举报
回复
#include <stdio.h>
#include <string.h>
#include <locale.h>
char s[256];
char *p;
int r,n,i;
int main() {
    setlocale(LC_ALL,"chs");
    while (1) {
        printf("请输入一行文字(空行结束),\"%%20\"将替换为\" \",\"你懂得\"将替换为\"XXXXXX\":\n");
        fgets(s,256,stdin);
        if ('\n'==s[0]) break;
        p=s;
        while (1) {
            p=strstr(p,"%20");
            if (p) {
                memmove(p+1,p+3,strlen(p)-3+1);
                p[0]=' ';
            } else break;
        }
        p=s;
        while (1) {
            p=strstr(p,"你懂得");
            if (p) {
                memmove(p+6,p+6,strlen(p)-6+1);
                for (i=0;i<6;i++) p[i]='X';
            } else break;
        }
        printf("%s",s);
    }
    return 0;
}
//请输入一行文字(空行结束),"%20"将替换为" ","你懂得"将替换为"XXXXXX":
//abcdefg%20helloworld%20something.pdf
//abcdefg helloworld something.pdf
//请输入一行文字(空行结束),"%20"将替换为" ","你懂得"将替换为"XXXXXX":
//这是测试文字你懂得,在这个你懂的地方,就得做你懂得的事
//这是测试文字XXXXX,在这个你懂的地方,就得做XXXXX的事
//请输入一行文字(空行结束),"%20"将替换为" ","你懂得"将替换为"XXXXXX":
//
所谓修改删除文件a某位置的内容,其实是读打开文件a,再将‘a中修改删除位置之前的内容+修改删除的内容+a中修改删除位置之后的内容’保存到文件b,关闭文件a,删除文件a,将文件b改名为与之前文件a相同的名字,仅此而已。
xiaohuh421 2014-02-14
  • 打赏
  • 举报
回复
道先你这个+5就不妥了. 再有, 你非要一个函数写完功能吗? 完全可以分成多个函数写啊. 这样嵌套就少些. 最后, 你最好去网上参考下其它人写的程序吧.
sevendays 2014-02-14
  • 打赏
  • 举报
回复
本人菜鸟,看了楼上的回复感觉这个问题还挺有意思的,我还要加强学习呀。
sniffer12345 2014-02-14
  • 打赏
  • 举报
回复
引用 楼主 u011873969 的回复:
就是从一个文本中搜寻一个关键词,然后将关键词替换成另一个词。 比如说,关键词是his和her 要将它替换成his or her 这是《Problem Solving with C++》上的一道练习题,以前看的时候认为这个太简单了,不值得一做,然后当我决定“玩玩”的时候,却发现这个成了我噩梦的开始!接下来的两天的时间我都花在了这个问题上面,结果只让问题变得更加扑朔迷离!我曾经数度陷入绝望状态:天哪,这么个小程序就这么难编,可咋整啊? 具体有什么问题呢?且听我细细道来: 1、如何找到这个可疑的关键词。我的思路是,首先将文本的每一行读入一个名叫perline大的string中,然后审查perline的每一个元素,看看是不是空行。如果是的话,那么用 string suspect = perline(begin + index, begin + index +5); 生成一个可疑的关键词suspect,其中begin指向perline的首项,而index是perline中那个空格的下标。之所以是5,是因为关键词的前面和后面都有一个空格。 2、检查这个可疑的关键词是不是关键词。这个比较好做。 3、如果不是关键词,那么 ++index; 否则替换关键词并且 index += 5; 4、…… 听上去很简单是吧?可是我实际操作的时候真的要死的心都有了!随便一写就弄出了8个嵌套语句!我都要看哭了。难道这个问题真的这么复杂?关键是你找到his或者her的时候,你还要检查这个his(her)是单独出现的his(her)还是实际上是his or her的一部分…… 各位大神,有什么好建议吗?不一定针对这个问题。就是当你写程序的时候,如果出现了N多的嵌套的话,应该怎么解决呢?
string.replace("his or her","").replace("his","$replacement$").replace("her","$replacement").replace("$replacement$,"his or her")

65,206

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧