Pereiti prie turinio

Failo su simboliais nuskaitymas (C++)


Rekomenduojami pranešimai

Reikia pagalbos nuskaitant failą su simboliais.

Yra duotas knygų skaičius n, tada eina n eilučių su knygos pavadinimais (iki 20 simbolių ilgio), tada duotas veikėjų skaičius m ir tada eina m simbolių su pirmomis tų veikėjų vardo raidėmis.

Reikia parašyti nuskaitymo funkciją panaudojant char (arba string, jei patogiau). Duomenų failo pvz.:

4

Hamletas 3 H O P

Balta drobulė 1 A

Skirgaila 2 S O

Dievų miškas 8 B J U O P T V G

 

Bėda kyla nuskaitant knygos pavadinimą, kadangi neaišku iš kiek žodžių jis bus sudarytas. Mano pabandymas:

 

 

 

void skaityti (int & n, int m, char Pavadinimas[], char Skaiciai[]){

char s1,s2; //nauji kintamieji, kurie bus reikalingi skaitant faila


setlocale(LC_ALL, "Lithuanian");

   ifstream f ("Duomenys.txt");

   f>>n;

   for(int x=0; x<n; x++){


   while (s1!=' '  ||  s2!=' '){
   f.get(s1);
   f.get(s2);

   cout<<s1<<s2;

   }
   cout<<endl;


   s1='a';
   s2='a';
   //prisilyginam bet kokiam ne tarpo simboliui, 
   //nes kitaip veliau nebebus vykdomas while ciklas



   f>>m;

   for(int j=0; j<m; j++)
   f>>Skaiciai[j];


   }



   f.close();
}

 

 

Tačiau man pačiam šis kodas neatrodo efektyvus(pvz.: jei knygos pavadinimas bus 20 simbolių ilgio, tada po jo bus tik 1 tarpas, o ne 2), be to, nežinau kaip tuos du paeiliui nuskaitytus simbolius sudėti į vieną, kad gauti visą žodį. Todėl praverstu bet kokia pagalba, susijusi su šia užduotimi:)

Nuoroda į pranešimą
Dalintis kituose puslapiuose

Jeigu tau realiai įdomu kaip galima atlikti užduotį, tai va vienas iš variantų, tačiau, jeigu grynai darai pagal vadovėlį ar dar ten kažką, tai gali tiesiog skaityti 20 simbolių pavadinimą, nes tau tai yra duota. Variantas kurį pateikiu, nepaiso fakto, kad pavadinimas gali būti 20 simbolių, jis viską deda į pavadinimą iki tol kol prieina skaičių.

 

#include <iostream>
#include <fstream>
#include <ctype.h>
#include <stdlib.h>
#define MAXBOOKS 1000

using namespace std;

struct Knyga
{
   string title;
   unsigned int charCount;
   string characters;

} knygos[MAXBOOKS];


int main()
{
   unsigned int booksCount;

   ifstream fd("duomenys.txt");
   fd >> booksCount;

   for(int i = 0; i < booksCount; i++)
   {
       string temp;
       fd >> temp;
       if(!isdigit(temp[0]))
       {
           knygos[i].title += temp + " ";
           i -= 1;
       }
       else
       {
           int charCount = atoi(temp.c_str());
           knygos[i].charCount = charCount;
           for(int j = 0; j < charCount; j++)
           {
               char temp2;
               fd >> temp2;
               knygos[i].characters += temp2;
           }
       }
   }
   fd.close();


   for(int i = 0; i < booksCount; i++)
   {
      cout << knygos[i].title << " ";
      for(int j = 0; j < knygos[i].charCount; j++) cout << knygos[i].characters[j] << " ";
      cout << endl;
   }
}

Nuoroda į pranešimą
Dalintis kituose puslapiuose

Prisijunkite prie diskusijos

Jūs galite rašyti dabar, o registruotis vėliau. Jeigu turite paskyrą, prisijunkite dabar, kad rašytumėte iš savo paskyros.

Svečias
Parašykite atsakymą...

×   Įdėta kaip raiškusis tekstas.   Atkurti formatavimą

  Only 75 emoji are allowed.

×   Nuorodos turinys įdėtas automatiškai.   Rodyti kaip įprastą nuorodą

×   Jūsų anksčiau įrašytas turinys buvo atkurtas.   Išvalyti redaktorių

×   You cannot paste images directly. Upload or insert images from URL.

Įkraunama...
  • Dabar naršo   0 narių

    Nei vienas registruotas narys šiuo metu nežiūri šio puslapio.

×
×
  • Pasirinkite naujai kuriamo turinio tipą...