Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.

[Zadatak] Uklanjanje suvisnih blankova iz recenice, slova u recima u inverznom poretku

[es] :: C/C++ programiranje :: C/C++ za početnike :: [Zadatak] Uklanjanje suvisnih blankova iz recenice, slova u recima u inverznom poretku

[ Pregleda: 3732 | Odgovora: 6 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

bulat5

Član broj: 90758
Poruke: 1
77.46.229.*



Profil

icon [Zadatak] Uklanjanje suvisnih blankova iz recenice, slova u recima u inverznom poretku12.12.2008. u 14:01 - pre 186 meseci
Teks zadatka:Napisati c program koju svaku rec u stringu zamenjuje recju koja se dobija tako sto se data rec zapise inverzno.U zadatku se jos trazi da se izbrisu nepotrebni razmaci izmedju reci sto sam resio.Ovakav program rotira i reci,ali i ceo string.


Kod:
Code:


#include <stdio.h>
#define max 30
/*prototip funkcija*/
void brisi_beline(char*s);
void inverzno(char*s);
main()
{
      /*definicija promenljivih*/
      char str[max];
      /*unso stringa*/
      printf("\n\n\t\tUnesite string:\n\n\t\tString=");
      gets(str);
      brisi_beline(str);
      inverzno(str);
      /*stanpanje stringa*/
      printf("\n\n\tNovodobijeni string:\n\n\t\tString=%s\n\n",str);
  system("PAUSE");    
  return 0;
}
void brisi_beline(char*s)
{
     /*definicija lokalnih promenljivih*/
     int i=0,j;
 
     while(s[i]!='\0')
     {
               while(s[i]!=' '&&s[i]!='\0')i++;
               if(s[i]!='\0');
               {
                       if(s[i+1]!=' ')i++;
                       else{
                            j=i;
                            while(s[j]!='\0')s[j]=s[j+1],j++;
                            }    
               }
                            
     }
}
void inverzno(char*s)
{
   /*definicija lokalnih promenljivih*/
   int i,n,pom;
   n=strlen(s);
   for(i=0;i<n/2;i++)
   { 
   pom=s[i];
   s[i]=s[n-i-1];
   s[n-i-1]=pom;
   }
   
}


EDIT: X Files : Molim Vas da zbog preglednosti, kod upisujete između tag-ova predviđenih za to: [code] ... [/code]

[Ovu poruku je menjao X Files dana 12.12.2008. u 15:59 GMT+1]
 
Odgovor na temu

EArthquake

Član broj: 20684
Poruke: 884
*.eunet.rs.



+67 Profil

icon Re: [Zadatak] Uklanjanje suvisnih blankova iz recenice, slova u recima u inverznom poretku12.12.2008. u 19:30 - pre 186 meseci

recimo da, pre izbacivanja space-ova prolazis kroz string i gledas da li je karakter space funkcijom isspace()
i tako izdvajas reci , zatim tu rec izvrnes kao sto vec radis, i tako za svaku rec , pritom vrseci konkatenaciju tih recu u jedan string , funkcija strcat() ...

samo pazljivo , da ti se ne prelije neki bafer ...

 
Odgovor na temu

X Files
Vladimir Stefanovic
Pozarevac

SuperModerator
Član broj: 15100
Poruke: 4902
*.tekostolac.co.yu.

Jabber: xfiles@elitesecurity.org


+638 Profil

icon Re: [Zadatak] Uklanjanje suvisnih blankova iz recenice, slova u recima u inverznom poretku22.12.2008. u 06:41 - pre 186 meseci
Just for record ;)

Code:

#include <stdio.h>
#include <stdlib.h>

#define MAX_VELICINA 100

void ukloni_suvisne_blankove( char *neki_tekst );
void okreni_redosled_slova_teksta( char *neki_tekst );

int main(void)
{
    char niz[MAX_VELICINA];

    printf( "Otkucajte recenicu: " );
    gets( niz );

    ukloni_suvisne_blankove( niz );

    printf( "Nova recenica, sa uklonjenim blankovima:\n[POCETAK]-->%s<--[KRAJ]\n", niz );

    okreni_redosled_slova_teksta( niz );

    printf( "Nova recenica, sa okrenutim slovima:\n%s\n", niz );

    return 0;
}

void ukloni_suvisne_blankove( char *neki_tekst )
{
    int i=0;
    int j;

    while ( neki_tekst[i] != '\0' )
    {
        if ( neki_tekst[i] == ' ' )
        {
            switch ( neki_tekst[i+1] )
            {
                case '\0':
                    neki_tekst[i] = '\0';
                    break;
                case ' ':
                    for ( j=i; neki_tekst[j] != '\0'; j++ )
                        neki_tekst[j] = neki_tekst[j+1];
                    neki_tekst[j] = '\0';
                    break;
                default:
                    if ( i == 0 )
                    {
                        for ( j=i; neki_tekst[j] != '\0'; j++ )
                            neki_tekst[j] = neki_tekst[j+1];
                        neki_tekst[j] = '\0';
                    }
                    else
                    {
                        ++i;
                    }
                    break;
            }
        }
        else
        {
            ++i;
        }
    }
}


void okreni_redosled_slova_teksta( char *neki_tekst )
{
    int pocetak=0;
    int kraj=0;

    int i, duzina;
    char pomocna;

    while ( neki_tekst[pocetak] != '\0' )
    {
        ++kraj;
        if ( neki_tekst[kraj] == ' ' || neki_tekst[kraj] == '\0' )
        {
            --kraj;
            if ( pocetak !=0 )
                ++pocetak;
            for ( i=pocetak; i<=pocetak+(kraj-pocetak)/2; i++ )
            {
                pomocna = neki_tekst[i];
                neki_tekst[i] = neki_tekst[kraj-(i-pocetak)];
                neki_tekst[kraj-(i-pocetak)] = pomocna;
            }
            pocetak = ++kraj;
        }
    }
}

Hvala Danijelu.
 
Odgovor na temu

Zuco1808
Nermin Jukic
Gracanica, BiH

Član broj: 260908
Poruke: 5
109.175.32.*



Profil

icon Re: [Zadatak] Uklanjanje suvisnih blankova iz recenice, slova u recima u inverznom poretku26.09.2011. u 15:09 - pre 152 meseci
Pozdrav, imam i ja jedan sličan zadatak (problem), nesto sam pokušo ali imam nekih problema.
Zadatak glasi otprilike ovako: Učitati fajl ulaz.txt te iz teksta koji se nalazi u tom fajlu ukloniti sve suvišne razmake (vise od jednog uzastopnog razmaka) te nakon toga tekst upisati u novi fajl koji se zove izlaz.txt.

evo mog koda :
Code:

#include <iostream>
#include <string>
#include <fstream>


using namespace std;
string Razmaci(string recenica){
   string s,s2;
   for(int i=0; i<recenica.size(); i++){
      if((recenica[i]==' ')&&(recenica[i-1]==' '))
         for(int j=i; j<recenica.size(); j++){
            recenica[j]=recenica[j+1];
         }
   }

   if((recenica[0]==' '))
      for(int i=0; i<recenica.size(); i++){
         recenica[i]=recenica[i+1];
      }
   else if(recenica[recenica.size()-1]==' ')
      recenica=recenica.substr(0,recenica.size()-2);

   for(int k=0; k<recenica.size();k++){
      s2.push_back(recenica[k]);}

   return s2;
}

int main()
{
   string s;
   string zavrsna;
   ifstream myfile ("c:/ulaz.txt");
   if (myfile.is_open())
   {
      while ( myfile.good() )
      {
         getline (myfile,s);
         zavrsna=Razmaci(s);
         cout<<"Nakon izbacivanja suvisnih razmaka recenica glasi:"<<zavrsna<<endl;
         ofstream outputFile;
         outputFile.open("C:/izlaz.txt");
         outputFile<<zavrsna;
         outputFile.close();
      }

      myfile.close();
   }
   else cout << "Unable to open file"; 

  /*  ofstream myfile ("c:/izlaz.txt");
  if (myfile.is_open())
  {
    myfile << zavrsna;
    myfile << "This is another line.\n";
    myfile.close();
  }
  else cout << "Unable to open file";*/

//cout<<"Unesite recenicu:"<<endl;
//getline(cin,s);
//zavrsna=Razmaci(s);
//cout<<"Nakon izbacivanja suvisnih razmaka recenica glasi:"<<zavrsna<<endl;

   system ("PAUSE");
   return 0;
}


Ako može pomoć, unaprijed hvala!!!

[Ovu poruku je menjao Mihajlo Cvetanović dana 26.09.2011. u 16:37 GMT+1]
 
Odgovor na temu

Mihajlo Cvetanović
Beograd

Moderator
Član broj: 37636
Poruke: 1249



+96 Profil

icon Re: [Zadatak] Uklanjanje suvisnih blankova iz recenice, slova u recima u inverznom poretku26.09.2011. u 15:42 - pre 152 meseci
Opiši probleme. Bez opisa problema često je teško videti šta je problem, a opis štedi i vreme onima koji bi hteli da ti pomognu.

Prvo što pada u oči je da je ofstream outputFile definisan u petlji što znači da će se otvarati i zatvarati onoliko puta koliko ima linija u ulaznom fajlu. Pretpostavljam da se na kraju vidi samo poslednja linija ulaznog fajla.
 
Odgovor na temu

Zuco1808
Nermin Jukic
Gracanica, BiH

Član broj: 260908
Poruke: 5
*.team.ba.



Profil

icon Re: [Zadatak] Uklanjanje suvisnih blankova iz recenice, slova u recima u inverznom poretku26.09.2011. u 21:38 - pre 152 meseci
OK pokušat cu objasniti, prvi i glavni problem je što ovo dalje ne mogu riješiti i zato trebam pomoć, za upis u fajl ste upravu moram ga izbaciti iz petlje. Problem imam u funkciji jer mi javlja grešku "string subscript out of range " bez obzira dal koristi upis u fal ili ga iskomentariso, prekida mi program (nudi mi mogućnost da nastavim dalje, da prekinem i da ignorisem gresku) program se izvrsi uz prijavu greske. To je ono sto mogu reći. Pomogli ili ne hvala Vam ipak.
 
Odgovor na temu

Zuco1808
Nermin Jukic
Gracanica, BiH

Član broj: 260908
Poruke: 5
109.175.40.*



Profil

icon Re: [Zadatak] Uklanjanje suvisnih blankova iz recenice, slova u recima u inverznom poretku27.09.2011. u 11:17 - pre 152 meseci
Pozdrav, hvala svima koji su pokušali da pomognu. Uspio sam naći neko rješenje za ovaj program i što je najvaznije dobijem tačan rezultat mada jos uvjek postoje neke greške, ali ispravit ce se to. evo kod:

Code:


//Delete blanck space 
#include <iostream>
#include <string>
#include <fstream>


using namespace std;
string Razmaci(string rec){
string recenica;
recenica = rec;
string s,s2 = "";
for(int i=0; i<recenica.size(); i++){
    if((recenica[i]==' ')&&(recenica[i-1]==' '))
        {
        
        }
    else
    {
    s2 = s2 + recenica[i];
    }
}
//for(int j=i; j<recenica.size(); j++){
//recenica[j]=recenica[j+2];
//}}
//
//if((recenica[0]==' '))
//for(int i=0; i<recenica.size(); i++){
//recenica[i]=recenica[i+1];}
//
//else if(recenica[recenica.size()-1]==' ')
//recenica=recenica.substr(0,recenica.size()-1);
//
//for(int k=0; k<recenica.size();k++){
//s2.push_back(recenica[k]);}


return s2;
}

int main()
{
string s,prn;
string zavrsna;
ifstream myfile ("c:/ulaz.txt");
  if (myfile.is_open())
  {
    while ( myfile.good())
    {
      getline (myfile,s);
      /*cout<<"Prije izbacivanje suviišnih praznina: "<<endl<<s<<endl;*/
       zavrsna=Razmaci(s);
       prn+=zavrsna+' ';
    }
    
    cout<<"Nakon izbacivanja suvisnih razmaka recenica glasi:"<<endl<<endl<<prn<<endl;
    myfile.close();

    ofstream myfile ("c:/izlaz.txt");
  if (myfile.is_open())
  {
     
    myfile << prn;
    //myfile << "This is another line.\n";
    myfile.close();
  }
  else cout << "Unable to open file";
  }

  else cout << "Unable to open file"; 


system ("PAUSE");
return 0;
}

 
Odgovor na temu

[es] :: C/C++ programiranje :: C/C++ za početnike :: [Zadatak] Uklanjanje suvisnih blankova iz recenice, slova u recima u inverznom poretku

[ Pregleda: 3732 | Odgovora: 6 ] > FB > Twit

Postavi temu Odgovori

Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.