Tablica char,plik tekstowy

0

Witam, wiem jak wczytać plik tekstowy do tablicy char ale nie potrafię zapisać to każdego elementu tablicy ciągu znaków,proszę o pomoc
Plik : abcdefg do tablicy zapisuje tab[0]=a itp a mi chodzi o to Plik : abc defg ghi do tablicy ma zapisywać tab[0]=abc itp

1

5 sekund w google, wpisałem c++ read file.
http://www.cplusplus.com/doc/tutorial/files/

  ifstream myfile("example.txt");

  if (!myfile.is_open()) {
    cout << "Unable to open file"; 
    return 1;
  }

  string line;
  while (getline(myfile,line)) {
      cout << line << '\n';
  }
  myfile.close();

I masz w stringu.

0

Ale on nie zapisuje to tablicy ciagu znaków abc tylko pojedyncze znaki

2

char to jest pojedynczy znak, więc tablica charów to tablica pojedynczych znaków. Ty chcesz mieć albo (bardzo tradycyjnie) tablicę wskaźników, albo (normalnie) wektor stringów.

1

W czym piszesz, w C czy C++?
W czystym C mógłbyś zastosować funkcję fscanf: http://www.cplusplus.com/reference/cstdio/fscanf/ która odczytuje znaki do pierwszego napotkanego znaku białego (czyli np spacji), kolejne wywołania funkcji scanf dadzą ci kolejne tablice znaków jak chciałeś:

 
char tekst1[20];
char tekst2[20];
char tekst3[20];

fscanf(fp, "%s", tekst1);
fscanf(fp, "%s", tekst2);
fscanf(fp, "%s", tekst3);

Tylko szkopuł jest taki że musiałbyś tworzyć tyle tablic ile ciągów znaków chcesz mieć.

Próbowałem to zrobić tak:

int main ()
{
    FILE *fp;
    char* tekst[200];
    int i = 0;

    if ((fp = fopen("test.txt", "r")) == NULL)
    {
        printf ("Nie mogę otworzyć pliku test.txt do zapisu!\n");
        exit(1);
    }

    while (fscanf(fp, "%s", tekst[i++]) != EOF)
    {
        printf(tekst[i - 1]);
    }

    fclose (fp);
    return 0;
}

Ale się wykrzacza, może ktoś będzie wiedział czemu, przecież funkcja oczekuje wskaźnika na chary to go otrzymuje, ale jednak jest crash.

3
czaffik napisał(a):

Ale się wykrzacza, może ktoś będzie wiedział czemu, przecież funkcja oczekuje wskaźnika na chary to go otrzymuje, ale jednak jest crash.
Funkcja oczekuje wskaźnika na obszar pamięci, do którego może zapisywać te znaki. Nie rezerwowałeś pamięci, wskaźnik wskazuje na nie wiadomo co, stąd crash to najlepsze co mogło Cię spotkać.

@nowy100

vector<string> texts;
string tmp;
while (getline(inputFile, tmp))
    texts.push_back(tmp);

Dobra, po przeczytaniu komentarzy zrozumiałem, że każdy string ma trzymać tylko jedno słowo, a nie całą linię, w takim razie ten kod powinien to zrobić (różnica jest jedynie w sposobie wczytania):

vector<string> texts;
string tmp;
while (inputFile >> tmp)
    texts.push_back(tmp);
0

Dzięki wielkie, pierwszy raz się spotykam z takim sposobem,nie mogłem nigdzie tego znaleźć

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