狮子歌歌丶 2019-06-03 15:51 采纳率: 100%
浏览 1514
已采纳

怎样将英文句子中出现给定单词的前后加上一个空格后输出?

【问题描述】
给定一个英文单词和一段英文句子,假设该单词和英文句子中只包含英文字母。编写一个程序,将英文句子中出现给定单词的前后加上一个空格后输出,以实现断词。要求若单词出现在句子的开头,则此单词之前不能添加空格;若单词出现在句子结尾,则此单词之后也不能添加空格;若单词在句子中连续出现,则单词与单词之间也只用一个空格断开。在句子中查找单词时大小写无关。
【输入形式】
先从控制台输入一英文单词(长度不超过10),然后在下一行输入一条英文句子(长度不超过50)。
【输出形式】
输出断词后的英文句子。
【输入样例】
the
Theschooltheboythethe
【输出样例】
The school the boy the the
【样例说明】
给定的单词为the,在给定的英文句子中,该单词出现了四次。第一次出现在句子开头,只在该单词后添加了一个空格,之前不能添加空格。第二次出现时前后各添加了一个空格。第三次与第四次连续出现,在第三次和第四次单词出现之间只加了一个空格,并且第四次出现在句子结尾,在其后也没有添加空格。

  • 写回答

2条回答 默认 最新

  • qtchen_1988 2019-06-03 17:16
    关注

    这题主要考察查找子字符串,可以用c,也可以c++,方法多种;
    图片说明

    #include <iostream>
    
    using namespace std;
    
    int main()
    {
    
        string str; //子字符串
        std::cout << "pls input word"<<endl;
        std::cin >> str;
        string src_str;// = "Theschooltheboythethe"; //源字符串
        std::cout << "pls input sentence"<<endl;
        std::cin >> src_str;
    
        bool p = false; //是否匹配,若匹配true,否则false
        int idx = 0; //子字符串索引
        string dest_str = ""; //保存最终字符串
        for(int i=0;i<src_str.length();i++)
        {
            //对空格的处理
            if(idx >= str.length())
            {
                p = false;
                idx = 0;
                if(dest_str.end()-(str.size()) == dest_str.begin())
                {
                   // std::cout << "In the first sentence and ignore it" <<endl;//在句子首位忽略它
                }
                else
                {
                    if(*(dest_str.end()-(str.size()+1)) != ' ') //对已有的空格不作处理
                        dest_str.insert(dest_str.end()-str.size(),' ');
                }
                dest_str += ' ';
            }
    
            //检验是否匹配
            if(!p)
            {
                if(((char)tolower(str.at(idx))) == ((char)tolower(src_str.at(i)))) //根据题意,忽略大小写
                {
                    ++idx;
                    p = true;
                }
            }
            else
            {
                if(((char)tolower(str.at(idx))) == ((char)tolower(src_str.at(i)))) //根据题意,忽略大小写
                {
                    ++idx;
                    p = true;
                }
                else
                {
                    p = false;
                    idx = 0;
                }
            }
            dest_str += src_str.at(i);
        }
        std::cout << dest_str << std::endl;
    
        return 0;
    }
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

悬赏问题

  • ¥15 易盾点选的cb参数怎么解啊
  • ¥15 MATLAB运行显示错误,如何解决?
  • ¥15 c++头文件不能识别CDialog
  • ¥15 Excel发现不可读取的内容
  • ¥15 UE5#if WITH_EDITOR导致打包的功能不可用
  • ¥15 关于#stm32#的问题:CANOpen的PDO同步传输问题
  • ¥20 yolov5自定义Prune报错,如何解决?
  • ¥15 电磁场的matlab仿真
  • ¥15 mars2d在vue3中的引入问题
  • ¥50 h5唤醒支付宝并跳转至向小荷包转账界面