найти определенное слово в предложении в C ++ - PullRequest
0 голосов
/ 10 февраля 2019

Я хочу написать программу, которая находит слово, введенное пользователем. Я думаю, что мое решение верное, но когда я запускаю его, программа ничего не показывает в консоли, кто-нибудь может это исправить?

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]=='\0')
               for(int k=i+1,t=0;k<j;k++,t++)
                   maybedel[t]=sen[k]; 


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



return 0;
}

Ответы [ 2 ]

0 голосов
/ 10 февраля 2019

Строка if (sen [i] == ''), строка 12 вашего кода, запрещает ввод кода в блок, если только предложение не начинается с ('')!Я немного изменил код, и теперь он работает нормально.

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] == '\0') {
        maybedel[t] = '\0';
        t = 0;

        if(strcmp(del,maybedel)==0) {
            cout << maybedel << endl;
        }
    }
    else
    {
        maybedel[t] = sen[i];
        t++;
    }
}
0 голосов
/ 10 февраля 2019

Основная причина отсутствия вывода:

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';
}
...