• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

C++ zapis stringa do tablicy z pliku

0 głosów
1,239 wizyt
pytanie zadane 11 marca 2018 w C i C++ przez kordel33 Nowicjusz (180 p.)
Jak z pliku pobrać ciąg liczb(string) i zapisać go w jednej komórce tablicy z pliku ?

Wygląd liczb w pliku

5
1 3 6 7 9
5
17 22 27 32 37
5
298 247147 493996 740845 987694
5
964 84041 167118 250195 333272
12
164 19149 38134 844348 76104 95089 114074 133059 152044 171029 190014 208999
15
komentarz 11 marca 2018 przez Qwerty96 Stary wyjadacz (13,580 p.)
Do sprawdzenia czy ciąg jest arytmetyczny nie trzeba w ogóle wczytywać liczb do tablicy.
komentarz 11 marca 2018 przez kordel33 Nowicjusz (180 p.)
Pewnie jest wiele możliwości masz rację, ale chciałbym żeby ktoś mi pomógł z tym zadaniem :/
komentarz 11 marca 2018 przez Qwerty96 Stary wyjadacz (13,580 p.)
Z czym konkretnie masz problem? Ze sprawdzeniem czy ciąg jest arytmetyczny?
komentarz 11 marca 2018 przez Radfler VIP (101,030 p.)
To jest zadanie "ciągi" ze zbioru CKE?
komentarz 11 marca 2018 przez kordel33 Nowicjusz (180 p.)
Ze sprawdzeniem i największa różnica

2 odpowiedzi

0 głosów
odpowiedź 11 marca 2018 przez Beginer Pasjonat (22,110 p.)
1. Pobieraj z pliku całe wiersze (stringi) funkcją getline().

2. Rozbieraj stringi na pojedyncze "liczby" wykorzystując spacje, i przekształcaj na int-y.

3. Do zbadania czy ciąg jest arytmetyczny wystarczy sprawdzić różnice trzech pierwszych wyrazów.

EOF
komentarz 12 marca 2018 przez Beginer Pasjonat (22,110 p.)
Na tę chwilę dwie wskazówki:

Dla każdego pobranego z pliku stringa oblicz jego długość funkcją lengjt(). Umiesz to zrobić.

Znając długość stringa, w pętli for "przeskanuj" po kolei wszystkie znaki stringa, i zatrzymuj się na spacji. W tym momencie trzeba cxąstkowego stringa przekształcić na int-a.
komentarz 12 marca 2018 przez kordel33 Nowicjusz (180 p.)
Zrobilem funkcje która oblicza dlugość linii ze spacjami, a drugiej części nie wiem co dalej
j-liczba znakow w linii(wraz ze spacjami)
for(int i=0;i<j;i++)

{

if(str[i] == " ")

break;

...(tutaj nie wiem jak podzielić stringa na inty)

}
komentarz 12 marca 2018 przez Beginer Pasjonat (22,110 p.)
Tak, chodziło o całkowitą długość stringa ze spacjami.

W pętli for "skanujemy" kolejne znaki stringa w poszukiwaniu spacji

for (int i = 0;  i mniejsze lenght();. i++)

(

if (pobrany_string( i ) == ' ') break;      //tu muszą być nawiasy kwadratowe

  ,....,.....

P.S. Nadaję z tabletu, nie mam wszystkich znaków.

To nie jest zadanie na pół godziny. Dokończymy jutro. Dobranoc.
komentarz 12 marca 2018 przez kordel33 Nowicjusz (180 p.)
Czekam rano :D
komentarz 12 marca 2018 przez Beginer Pasjonat (22,110 p.)

Poniżej zamieszczam rozwiązanie punktu 2. - rozbiór stringa na liczby. Uruchom ten program i zobacz jak działa. Wmontuj do swojego projektu. 

Jeśli długość ciągu len < 5, trzeba od razu przerywać i pobierać następny wiersz (ciąg). 

Mając trzy pierwsze liczby z każdego ciągu można łatwo badać różnicę wyrazów (czy ciąg jest arytmetyczny).

Jeśli coś jest nie jasne daj znać.

/*************** Rozbior stringa na liczby ****************/

#include <string.h>
#include <iostream>
#include <stdio.h>

using namespace std;

int main()
{
    string ciag = "17 22 27 32 37";                   //pojedynczy wiersz pobrany z pliku danych

    int spac_1 = 0; int spac_2 = 0; int spac_3 = 0;   //indeksy (pozycje) trzech kolejnych spacji w stringu

    int len = strlen(ciag.c_str());                   //oblicza dlugoœæ stringa (ile jest znaków)
    //if (len < 5) break;                             //minnimalny ciag musi miec przynajmniej piec znakow

    int k = 1;
    for (int i = 0; i < len; i++)                     //w petli for przegladamy kolejne znaki stringa w poszukiwaniu spacji
    {
      if (ciag[i] == ' ' && k == 1) {spac_1 = i; k += 1;}          //indeks (pozycje) pierwszej spacji w ciagu
      else if (ciag[i] == ' ' && k == 2) {spac_2 = i; k += 1;}     //indeks (pozycje) drugiej spacji
      else if (ciag[i] == ' ' && k == 3) {spac_3 = i;}             //indeks (pozycje) drugiej spacji
      if (spac_3 != 0) break;
    }

    string wyraz_1 (ciag, 0, spac_1);                    //pierwszy wyraz ciagu
    int liczba_1;
    sscanf(wyraz_1.c_str(), "%d", &liczba_1);            //zamiana string - na int-a

    string wyraz_2 (ciag, spac_1 + 1, spac_2 - spac_1);  //drugi wyraz ciagu
    int liczba_2;
    sscanf(wyraz_2.c_str(), "%d", &liczba_2);            //zamiana string - na int-a

    string wyraz_3 (ciag, spac_2 + 1, spac_3 - spac_2);  //trzeci wyraz ciagu
    int liczba_3;
    sscanf(wyraz_3.c_str(), "%d", &liczba_3);            //zamiana string - na int-a

    //trzy pierwsze wyrazy ciagu przeksztalcone na liczby
    cout << " " << liczba_1 << endl;
    cout << " " << liczba_2 << endl;
    cout << " " << liczba_3 << endl;

    return 0;
}

.

0 głosów
odpowiedź 12 marca 2018 przez Beginer Pasjonat (22,110 p.)
W tym zadaniu nie trzeba wczytywać żadnych stringów!

Podobne pytania

0 głosów
1 odpowiedź 1,473 wizyt
0 głosów
1 odpowiedź 204 wizyt
0 głosów
5 odpowiedzi 3,185 wizyt

89,128 zapytań

137,730 odpowiedzi

307,728 komentarzy

59,180 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Sklep oferujący ćwiczenia JavaScript, PHP, rozmowy rekrutacyjne dla programistów i inne materiały

Oto dwie polecane książki warte uwagi. Pełną listę znajdziesz tutaj.

...