Wątek przeniesiony 2014-02-27 12:14 z C/C++ przez ŁF.

Tablice , anagramy

0

Witam,
Wszystko działa dobrze dopóki nie wstawię wypisania tablicy tabdwa[i] wtedy wypisuje mi tylko ostatni wiersz poprzedniej posortowanej tablicy.
Potrzebuję pomocy czy ktoś widzi gdzie tu jest błąd?

 

#include<conio.h>
#include<fstream>
#include<string>
#include<iostream>
#include<ostream>
#include<cstdlib>
#include<math.h>

using namespace std;

main()
{
      int i,j;
      string napis,tab[4],tabdwa[4];
      
      ifstream wejdz("anagram1.txt");
      ofstream wypisz("string.txt");
      
      if(!wejdz)
      {
      cout << "nie mozna otworzyc pliku";
      return 0;
      }
      
      while(!wejdz.eof())
      {
         j=0;                
       //getline(wejdz,napis);
       wejdz >> tab[0];
       for(i=1;i<=4;i++)
                        {                                  
                          wejdz >> tab[i];
                         if (tab[0].length()==tab[i].length())
                          j++;
                          }
              if(j==4)
             {
              for(i=0;i<=4;i++)
                          {
                          wypisz << tab[i] << " " ;
                          
                          }
                          
                          wypisz<< endl;
                          }
                                                       
      }
      
      
      

      wejdz.close();
      wypisz.close();


      ifstream wejdz1("string.txt");
      ofstream wyjdz("anagramy_b.txt");

      if(!wejdz1)
      {
      cout << "Nie ma takiego pliku";
      return 1;
      }
      int k,temp;
      while(!wejdz1.eof())
                          {
      
                               for(i=0;i<=4;i++)
                                                   {
                                                   wejdz1 >> napis;
                                                   tabdwa[i] = napis;
                                                    
                                                          for(j=0;j<napis.length()-1;j++)
                                                                                         {
                                                                                         for(k=0;k<napis.length()-1;k++)
                                                                                         if(int(napis[k])>int(napis[k+1]))                          
                                                                                         {
                                                                                         temp=napis[k];
                                                                                         napis[k]=napis[k+1];
                                                                                         napis[k+1]=temp;
                                                                                         }
                           
                                                                                         
                                                                                        
                                                                                         }
                                                   tab[i]=napis;
                                                   
                                                   }
                                                   k=0;
                                                   for(i=1;i<=4;i++)
                                                                    {
                                                                
                                                                    if(tab[0]==tab[i])
                                                                    k++;
                                                                   }
                                                   if(k==4)
                                                        {
                                                       for(i=0;i<=4;i++)
                                                           wyjdz << tabdwa[i] << " ";
                                                           wyjdz << endl;
                                                          }
                                               
                                               }
                          
      
      wejdz1.close();
      wyjdz.close();

system("PAUSE");
return 0;

getche();      
}


0

Sformatuj po ludzku kod oraz podaj co to ma robić. Na pierwszy rzut oka całość należy wywalić i zacząć od nowa.

0

Kod w pierwszym while wyciaga z pilu linijki o takicha samych długościach wyrazów w nich zawartych
W drugim while sortuje wyciagniete tamte linie i sprawdza potem czy to nie sa anagramy. Wszystko działało ok sortowanie itp. tylko jak dołożyłam , żeby zapisać te linie angramów i zapisałam tabdwa[4], tabdwa[i]=napis; to jak wypisuje go w tym miejscu to program wypisuje mi linijkę ostatniego wiersza posortowanych elementów. A elementy maja byc zapisane w pliku ale jeszcze przed sortowaniem , z tym, że wiadomo , iż anagramy.

#include<fstream>
#include<string>
#include<iostream>
#include<ostream>
#include<cstdlib>

using namespace std;

main()
{
      int i,j,k,temp;
      string napis,tab[4],tabdwa[4];
      
      ifstream wejdz("anagram1.txt");
      ofstream wypisz("string.txt");
      
      if(!wejdz)
      {
      cout << "nie mozna otworzyc pliku";
      return 0;
      }
      
      while(!wejdz.eof())
      {
       j=0;
       wejdz >> tab[0];
       for(i=1;i<=4;i++)
          {                                  
           wejdz >> tab[i];
           if (tab[0].length()==tab[i].length())
              j++;
          }
       if(j==4)
         {
          for(i=0;i<=4;i++)
             wypisz << tab[i] << " " ;
          wypisz<< endl;
         }
                                                       
      }
      wejdz.close();
      wypisz.close();

      ifstream wejdz1("string.txt");
      ofstream wyjdz("anagramy_b.txt");

      if(!wejdz1)
      {
      cout << "Nie ma takiego pliku";
      return 1;
      }
      
      while(!wejdz1.eof())
           {
            for(i=0;i<=4;i++)
               {
                wejdz1 >> napis;
                tabdwa[i] = napis;
                for(j=0;j<napis.length()-1;j++)
                   {
                   for(k=0;k<napis.length()-1;k++)
                       if(int(napis[k])>int(napis[k+1]))                          
                         {
                         temp=napis[k];
                         napis[k]=napis[k+1];
                         napis[k+1]=temp;
                         }
                   }
                tab[i]=napis;
               }
            k=0;
            for(i=1;i<=4;i++)
               {
                if(tab[0]==tab[i])
                k++;
               }
            if(k==4)
              {
               for(i=0;i<=4;i++)
               wyjdz << tabdwa[i] << " ";
               wyjdz << endl;
              }
           }
                          
      
      wejdz1.close();
      wyjdz.close();

system("PAUSE");
return 0;
}


 
0

Piszę strukturalnie póki co, bo zaczynam przygodę z programowaniem :)

1 użytkowników online, w tym zalogowanych: 0, gości: 1