👤
Printess199
a fost răspuns

URGENT 188 pbinfo VA ROG MULT!!!
Eu am facut-o bine, dar primesc doar 25 de puncte.
In schimb, macar pot vedea indicatiile de rezolvare:
La fiecare pas, vom șterge din propoziție primul cuvânt și îl vom insera pe al doilea, folosind funcțiile oferite de limbajul de programare folosit.


Problema:
Se dau două cuvinte a şi b şi o propoziţie s formată numai din litere mici ale alfabetului englez şi spaţii.

Cerinţa
Să se modifice s, înlocuind fiecare apariţie a cuvântului a cu cuvântul b.

Date de intrare
Fişierul de intrare inlocuirecuvant.in conţine pe prima linie cuvintele a şi b, separate printr-un spaţiu, iar pe a doua linie propoziţia s.

Date de ieşire
Fişierul de ieşire inlocuirecuvant.out va conţine pe prima linie propoziţia s, modificată în conformitate cu cerinţa.

Restricţii şi precizări
propoziţia s va avea cel mult 100 caractere
cuvintele a şi b vor avea cel mult 10 caractere
cuvintele sunt formate numai din litere mici ale alfabetului englez



Exemplu
inlocuirecuvant.in

dar insa
dar nu trebuie dar e mai bine astfel
inlocuirecuvant.out

insa nu trebuie insa e mai bine astfel


Răspuns :

#include <iostream>

#include <fstream>

#include <cstring>

using namespace std;

ifstream in("inlocuirecuvant.in");

ofstream out("inlocuirecuvant.out");

int main(){

   char a[20], b[20], t[500], *temp;

   in >> a >> b;

   in.getline(t, 500);

   in.getline(t, 500);

   temp = strstr(t, a);

   while (temp) {

       if ((temp == t || *(temp - 1) == ' ') && (*(temp + strlen(a)) < 'a' || *(temp + strlen(a)) > 'z')) {

           char t[500];

           strcpy(t, temp + strlen(a));

           strcpy(temp, b);

           strcpy(temp + strlen(b), t);

           temp = strstr(temp + strlen(b), a);

       } else temp = strstr(temp + strlen(a), a);

   } out << t << endl;

   return 0;

}