Skocz do zawartości
Rorschach

[ansi C Lub C++] Program Podmieniający Dany Wyraz Na Inny

Rekomendowane odpowiedzi

Mam do napisania programik w ansi c (jakby co moze byc tez c++) otoz ma on wyszukiwac w zadanym tekscie slowo Ala i zamieniac go np na Ola. Nie wiem w jaki sposob mozna przekazac tekst do sprawdzenia i w jaki sposob ma on po kolei przechodzic do kolejnego wyrazu. Na razie wiem, ze beda to 2 petle, pierwsza poruszania po tekscie, a druga wewnetrzna to sprawdzanie czy wyraz=Ala jesli tak to zamienia na Ola. Bardzo prosze o jakas pomoc. Pozdrawiam

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

Jeśli chodzi o algorytm to wygląda to tak tworzysz sobie bufor 3 znakowy i do niego wrzucasz kolejne znaki i sprawdzasz czy odpowiadaja one temu co masz czyli 'ala', jesli nie to wyrzucasz pierwszy na wyjście przesuwasz reszte i na końcu wrzucasz nowy znak z wejścia, jesli odpowiada temu co szukasz to na wyjsciu wrzucasz to co Cie interesuje i czyscisz bufor.

To była naiwna i najprostrza i najsłabsza impelmentacja, jeśli chcesz coś lepsze to wypadało by zbudowąc automat skończony o 4 stanach (q0 - nic nie pasuje, q1 - pierwsza listera pasuje, q2- dwie pierwsze litery pasują, q3- cały trzyliterowy znak się zgadza) nastepnie budujesz odpowiednią funkcję przejścia i implementujesz i po sprawie, wyjście pewnie trzeba będzie buforować też 3 znakowym buforem ale będzie mógł się on znajdowac w 3 znakowej tablicy cyklicznej. Jesli nie wiesz o czym pisze i zrób to naiwnie.

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

powiedz tylko czy mozliwy jest przypadek ze slowo "ala" zostanie zamienione na "konstantynopolitanczykiewiczówna" ( inna ilosc znakow ). Moze jak mi sie bedzie chcialo to napisze ci jutro ( tzn dzisiaj ) :)

 

i pytanie nr2: czy przy regule "ala"->"ola" ma zamienic np "mala" na "mola" ?

Edytowane przez Nargil

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

opowiedz na pytanie nr2...

Problemem jest coś takiego:

przypuścmy że zamieniamy "ala"->"ola", i mamy wyraz "alala", i na co to ma zamienić? Na "olala"? Czy na "olola"? To i to będzie poprawne kwestia specyfikacji problemu. Wogóle maskaryczne będzie gdy zamienimy "dom"->"domek", wtedy przy wyborze drugiego sposobu zamiany nastąpi zapętlenie, dom->domek->domekek->domekekek-> ......

Najpierw sprecyzujcie dokładnie problem a dopiero później do pisania można się zabrać.

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

kod w c++

#include <iostream>#include <sstream>using namespace std;typedef struct lista_node{   string szukaj;   string zastap;   lista_node* next;};typedef class lista_header{   public:   int count;   lista_node* tmp;   lista_node* first;   void pobierz_liste();   lista_header();   ~lista_header();   string zamien(string str);   private:	 void del_all(lista_node* n);	 void dodaj(string str1, string str2);};string lista_header::zamien(string str){   tmp=first;   while(tmp!=NULL)   {	  if(tmp->szukaj==str) return tmp->zastap;	  tmp=tmp->next;   }   return str;}   void lista_header::dodaj(string str1, string str2){   if(count>0)   {		while(tmp->next!=NULL) tmp=tmp->next;		tmp->next = new lista_node;		tmp=tmp->next;   }   tmp->next=NULL;   tmp->szukaj=str1;   tmp->zastap=str2;   count++;}lista_header::lista_header(){	count=0;	first = new lista_node;	tmp=first;}lista_header::~lista_header(){   del_all(first);}void lista_header::del_all(lista_node* n){   if(n->next!=NULL) del_all(n->next);   delete n;}void lista_header::pobierz_liste(){  char szuk[255],zam[255];  while(true)  {	 cout << "Szukaj (enter, aby przerwac): ";	 cin.getline(szuk,255);	 if(strlen(szuk)<1) break;	 cout << "Zamien na:";	 cin.getline(zam,255);	 dodaj(szuk,zam);  }  system("cls");}const char* zamien(string text, lista_header* zamiany){  istringstream ss(text,istringstream::out);  string out;  char tmp[255];  while(ss.good())  {	 ss.getline(tmp,255,' ');	 out= out + zamiany->zamien(tmp) + " ";  }  return out.c_str();}int main(int argc, char *argv[]){  char* text;  text = new char[11111111];  lista_header* zamiany = new lista_header;  zamiany->pobierz_liste();  cout << "Podaj tekst do zamiany:" << endl;  cin.getline(text, 111111111);  text = (char*)zamien(text,zamiany);  cout << endl << endl << endl << text << endl;  delete zamiany;  delete [] text;  system("PAUSE");	  return 0;}
dziala na wyrazach jako calosci, czyli dla reguly "ala"->"ola" nic sie nie dzieje z wyrazem "mala", czy "alalala". Ponadto rozroznia wielkosc liter. czyli dla reguly "elo"->"czesc" nie zadziala ze zdaniem "Elo rap ziom" Edytowane przez Nargil

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

no to kod napisany wyzej dziala dokladnie tak jak powinien. Co najwyzej mozesz sie pobawic aby ignorowal wielkosci liter, jesli jest to wymagane. Moznaby tez zmienic sposob wczytywania tekstu, bo tu zakladamy ze jego dlugosc nie przekroczy 11111111 znakow, a nawet dla mniejszego tekstu zuzywane jest cale 11111111 bajtow pamieci

Edytowane przez Nargil

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

wielkie dzieki Nargil, podziwiam samozaparcie. Ale przerabianie tego na ansi bedzie syzyfowa praca :). Poki co doszedlem do czegos takiego

#include <cstddef> #include <string> #include <iostream> using namespace std; int main() {    string a; 		string b("Ala");    string c("Ola");    cout << "Podaj tekst do wczytania" << endl;    getline(cin, a);    size_t pozycja;    pozycja = a.find(b);    while(pozycja != string::npos )    { 	  a.replace(pozycja, b.size(), c); 	  pozycja = a.find(b, pozycja+1);    } 	   cout << a << endl;    return 0; }
w sumie dziala, o wiele latwiej bedzie mi przerobic na ansi c.

Twoj program jest ok tylko jest za inteligennty. Zauwaylem w tym programie klasy i w ogole takie bajery ktore bedzie nam facet wykladal dopiero w przyszlym semestrze :).

Edytowane przez Rorschach

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

moze byc c++, bo w miare prosty program przerobie na ansi c, ale juz klasy itp to nie na moje mozliwosci.

A mam pytanko czy ktos sie zna tu na ansi c??

 

jaka biblioteke trzeba dolaczyc do pliku, zeby w ansi zadeklarowac string??

Edytowane przez Rorschach

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

#include <stdio.h>#include<string.h>main(){char a; char b; char buff[256]; printf("Podaj wyraz szukany \n"); scanf("%s",&a);printf("podaj wyraz, na ktory zostanie zamieniony wyraz szukany \n");scanf("%s", &b);

mam teraz pytania

chce wczytac plik dane.txt (funkcja fcanf -tego sie domyslam) i wczytac je do tablicy buff. A nastepnie wrzucic do jakiejs petelki. Bardzo prosze o pomoc

 

polecam ... dobra stronka o C ...

dzieki za stronke z przyjemnoscia sie z nia zaznajomie, ale teraz nie mam za bardzo czasu bo na jutromusze wrescie napisac ten piekielny program

Edytowane przez Rorschach

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

dzieki za stronke z przyjemnoscia sie z nia zaznajomie, ale teraz nie mam za bardzo czasu bo na jutromusze wrescie napisac ten piekielny program

Też tak kiedyś mówiłem że nie mam czasu czytać man, help, instrukcji ale z czasem doszedłem do wnisoku że jednak mam na to czas :D i uwierz mi najszybszą drogą by coś zrobić nie jest czekanie na to aby ktoś za Ciebie zrobił ale przeczytanie dokumentacji.

Co do dalszego pytania, plik otworzysz poleceniem fopen, pobierac znaki możesz pojedyńczo funkacja fgetc, lub kilka naraz funkcja fscanf, szczegóły w podręcznikach lub chociażby na google. Jeśli chciałbyś aby ktoś za Ciebie coś zrobił to licz się z tym że zwykle za to musisz zapłacic, wkońcu w jakimś celu ktoś zdobywa wiedzę którą innym nie chce się zdobywać bo nie mają czasu.

Edytowane przez Ragnor

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

Nie chce zeby ktos go za mnie napisal, ale tez odsylanie do google itp, potrzebuje pewnych informacji na szybko. Kursów do C/C++ jest w cholere,ale co do Ansi C prawie nic lub angielsko-jezyczne manuale. A ja i angielski to niezbyt dobre polaczenie. Przyznam chcialbym, zeby ktos podal mi wszystko na talerzu co sprawiloby, ze oszczedzilbym 3 dni meczenia, ale ja i tak musze umiec go napisac, bo ktos mnie z tego programu przepyta i musze wiedziec jak on dziala.

 

Zreszta nie jestem na zadnych studiach informatycznych, a programowanie w Ansi C jest tylko udreka na naszym roku

Edytowane przez Rorschach

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

Nie chce zeby ktos go za mnie napisal, ale tez odsylanie do google itp, potrzebuje pewnych informacji na szybko. Kursów do C/C++ jest w cholere,ale co do Ansi C prawie nic lub angielsko-jezyczne manuale. A ja i angielski to niezbyt dobre polaczenie. Przyznam chcialbym, zeby ktos podal mi wszystko na talerzu co sprawiloby, ze oszczedzilbym 3 dni meczenia, ale ja i tak musze umiec go napisac, bo ktos mnie z tego programu przepyta i musze wiedziec jak on dziala.

Podałem Ci jakiś funckji masz użyć aby osiągnąc to co chcesz. Co do ANSI C to jest na ten temat pewna klasyczna książka "Język ANSI C" Brian Kernigham, wystarczyło ją przekartkować i wszystko byś wiedział.

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

to nie ja, u nas polowa roku dostala takie same zadanie i wszyscy jestesmy tak samo tepi jesli chodzi o pisanie w ansi c, moze to jakis kumpel z roku. No w sumie jutro trzeba oddawac, wiec kazdy desperacko szuka jakies drogi wyjscia

 

Podałem Ci jakiś funckji masz użyć aby osiągnąc to co chcesz. Co do ANSI C to jest na ten temat pewna klasyczna książka "Język ANSI C" Brian Kernigham, wystarczyło ją przekartkować i wszystko byś wiedział.

w bibliotece wszystko wypozyczone, a nie bede wydawal iles kasy na roczny romans. To mi nie bedzie potrzebne. Ten przedmiot musze przezyc, a ze trafil nam sie bardzo wymagajacy profeso, to musze jakos kombinowac jak reszta roku.

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

w bibliotece wszystko wypozyczone, a nie bede wydawal iles kasy na roczny romans. To mi nie bedzie potrzebne. Ten przedmiot musze przezyc, a ze trafil nam sie bardzo wymagajacy profeso, to musze jakos kombinowac jak reszta roku.

Znajomość C jeśli chcesz coś umieć więcej niż siedzieć pod Windowsem i klikać, jest ciągle ważna. Jesli to uważasz za wymagające to wspólczuje, u mnie na pierwszym roku (1 semestrze) przyszło niektórym pisać implemetacje drzew binarnych, rózne algorytmy na grafach i inne kwiatki, na drugim roku przyszła kolej na budowe kompilatora wymyslonego języka na wymyslone procesor, a więc lekser, parser, emulator, assembler, deassembler, te rzeczy możesz nazwać wymagającymi, a to co Ty masz to łatwa zabawa z C i nic więcej.

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

Dołącz do dyskusji

Możesz dodać zawartość już teraz a zarejestrować się później. Jeśli posiadasz już konto, zaloguj się aby dodać zawartość za jego pomocą.

Gość
Dodaj odpowiedź do tematu...

×   Wklejono zawartość z formatowaniem.   Przywróć formatowanie

  Dozwolonych jest tylko 75 emoji.

×   Odnośnik został automatycznie osadzony.   Przywróć wyświetlanie jako odnośnik

×   Przywrócono poprzednią zawartość.   Wyczyść edytor

×   Nie możesz bezpośrednio wkleić grafiki. Dodaj lub załącz grafiki z adresu URL.

Ładowanie


×
×
  • Dodaj nową pozycję...