fscanf(plik, "%s%s%s (...) ", wyraz[0], (...) ) w C++

0

dzień dobry,

Mam taką funkcję;

void liczba_znakow()
{
  char wyraz[5][21];
  FILE *plik=fopen("anagram.txt","r");
  File *wynik=fopen("odp_4a.txt","w");
  do
  {
	if(fscanf(plik, "%s%s%s%s%s", wyraz[0], wyraz[1], wyraz[2], wyraz[3], wyraz[4])<=0) break;
        if((strlen(wyraz[0])==strlen(wyraz[1]))&&(strlen(wyraz[2])==strlen(wyraz[3]))&&(strlen(wyraz[4])==strlen(wyraz[0]))&&(strlen(wyraz[2])==strlen(wyraz[0])))
        fprintf(wynik, "%S %s %s %S %s\n", wyraz[0], wyraz[1], wyraz[2], wyraz[3], wyraz[4]);
  }while(1);
	fclose(wynik);
	fclose(plik);
}

Chciałbym to samo zapisać w c++ - poniżej, ale zamiast fscanf(), musiał bym zapewno użyć getline'a, ale cos kombinuje kombinuje i nie wychodzi, słowa w pliku anagramy.txt są oddzielone spacją, czyli próbowałem tak:

for(int i=0; i<5; i++)getline(inFile,wyraz[i]," ")

, ale coś źle kombinuje. Z góry, dzięki za pomoc.

#include <cstdlib>
#include <iostream>
#include <fstream>

using namespace std;

    void tyle_samo_znakow()
     {
         char wyraz[5][22];
         ifstream inFile;
         inFile.open("anagram.txt");
         ofstream outFile;
         outFile.open("ZADANIE_X_.txt");
         do{
                  if(/*/inFile>>wyraz[0]>>wyraz[1]>>wyraz[3]>>wyraz[4]/*/) <= 0)break; 
                  if(strlen(wyraz[0])==strlen(wyraz[1]) && strlen(wyraz[2])==strlen(wyraz[3]) && strlen(wyraz[4])==strlen(wyraz[0]) && strlen(wyraz[2])==strlen(wyraz[0])) outFile<<wyraz[0]<<wyraz[1]<<wyraz[2]<<wyraz[3]<<wyraz[4];
         }while(true);
         outFile.close();
         inFile.close();
     }

int main()
{
 tyle_samo_znakow();
    system("PAUSE");
    return 0;
}
0

A na przyklad tak

#include <iostream>
#include <fstream>
#include <cstring>

using namespace std;


int main()
{
    fstream file;
    string data;
    file.open("dane.txt");
    if(!file.is_open())
    {
        cout << "Blad otwarcia pliku.";
    }
    else
    {
        while(file>>data)
        {
            cout << data << endl;
        }
    }
}
0

no ok. a jeszcze jedno pytanie jak mam plik gdzie w każdym wierszu jest 5 ciągów znaków oddzielonych znakiem ; np.:

abcds;fasdfa;afasdf;asdfasd;sdfasa
(...)

teraz chce każdy z ciągów wpisać do tablicy char'ow, aby przetworzyć i ewentualnie wpisac do pliku, co jak wiadomo wyszło by gdyby ciągi znaków w pliku jakis_plik.txt były oddzielone białym znakiem, a jak powinna wyglądać składnia printu albo scana w przypadku gdy wyrazy oddzielone są znakiem np ;

FILE *plik=fopen("jakis_plik.txt","r");
FILE *wynik=fopen("wyniki.txt","w");
char wiersz[5][21];
while(1)
{
 if(fscanf(plik,"%s%s%s%s%s",wyraz[0],wyraz[1],wyraz[2],wyraz[3],wyraz[4]<=0) break;)
 if((...))
 {(...)}
 else
      fprintf(wyniki,"%s%s%s%s%s",wyraz[0],wyraz[1],wyraz[2],wyraz[3],wyraz[4);
}

fclose(wyniki);
fclose(plik);
0

A cos takiego jak dokumentacja to jest znane? No to wypadaloby zajrzec i mozna napisac cos prostego samemu zeby to zrobic.

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

using namespace std;


int main()
{
    fstream file;
    string data;
    char d;
    file.open("dane.txt");
    if(!file.is_open())
    {
        cout << "Blad otwarcia pliku.";
    }
    else
    {
        while(file.get(d))
        {
            if(d == ';') data = data + " ";
            else data = data + d;
        }
        file.close();
        cout << data << endl;
    }
}
0

bardziej mi chodziło jak by to było w c, w przykładzie który podałem, ale dzięki żeby nie było to sam poszperam, dzieki za przykłady pozdrawiam.

0

Nazwa tematu mowi jasno "... w c++" no to masz cpp. C nie znam to nie pomoge, ale dokumentacja istnieje i wystarczy zajrzec zeby cos samemu skodzic.

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