在 C++ 的句子中查找某个单词

find a certain word in sentence in c++

本文关键字:单词 查找 C++ 句子      更新时间:2023-10-16

我想编写一个程序来查找用户输入的单词我认为我的解决方案是正确的,但是当我运行它时,该程序在控制台中不显示任何内容任何人都可以修复它?

int main()
 {
   char sen[200],del[200],maybedel[200];
   cout<<"enter sentence :"<<endl;
   cin.getline(sen,200);
   cout<<"which word do you want to delete ?";
   cin.getline(del,200);
   int len = strlen(sen);
   for(int i=0;i<=len;i++)
   {
    if(sen[i]==' ')
    {
        for(int j=i;j<=len;j++)
            if(sen[j]==' ' || sen[j]=='')
               for(int k=i+1,t=0;k<j;k++,t++)
                   maybedel[t]=sen[k]; 

    if(maybedel==del)
        cout<<maybedel;
    }
  }

return 0;
}

代码的第 12 行 if(sen[i]==' '( 阻止代码进入块,除非句子以 (' '( 开头!我稍微更改了代码,现在它可以正常工作。

char sen[200], del[200], maybedel[200];
cout << "enter sentence :" << endl;
cin.getline(sen, 200);
cout << "which word do you want to delete ?" << endl;
cin.getline(del, 200);
int len = strlen(sen);
int t = 0;
for(int i = 0; i <= len; i++) {
    if(sen[i] == ' ' || sen[i] == '') {
        maybedel[t] = '';
        t = 0;
        if(strcmp(del,maybedel)==0) {
            cout << maybedel << endl;
        }
    }
    else
    {
        maybedel[t] = sen[i];
        t++;
    }
}

没有输出的主要原因是

if (maybedel == del)  // <<< this will *never* be true
  cout << maybedel;   // will never run

由于比较数组中的"字符串"需要std::strcmp(maybedel,del) == 0的帮助会更好。

更新:

另一种攻击方法是避免原始循环并利用 STL 对您有利。下面是一个更强大的解决方案:

#include <algorithm>
#include <iostream>
#include <iterator>
#include <sstream>
#include <vector>
using namespace std;
int main() {
    cout << "enter sentence :n";
    string sen;
    if (!getline(cin, sen)) throw std::runtime_error("Unable to read sentence");
    cout << "which word do you want to delete ? ";
    string del;
    if (!(cin >> del)) throw std::runtime_error("Unable to read delete word");
    istringstream stream_sen(sen);
    vector<string> arrayofkeptwords;
    remove_copy_if(istream_iterator<string>(stream_sen), istream_iterator<string>(),
                   back_inserter(arrayofkeptwords),
                   [&del](auto const &maybedel) { return maybedel == del; });
    copy(begin(arrayofkeptwords), end(arrayofkeptwords),
         ostream_iterator<string>(cout, " "));
    cout << 'n';
}