• 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

Object Storage Arubacloud
0 głosów
1,860 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 11 marca 2018 przez Beginer Pasjonat (22,110 p.)
P.S. Sprawdzenie największej różnicy to jest zupełnie banalna sprawa, dlatego o tym nie wspominałem.
komentarz 11 marca 2018 przez kordel33 Nowicjusz (180 p.)
Nie wiem jak zrobić pkt 2
Musi porównać każdy element w linii bo np pierwsze 13-ście wyrazów bedzie dobre a ostatni lub w środku będzie zły i lipa
komentarz 11 marca 2018 przez Beginer Pasjonat (22,110 p.)
Przecież w funkcji, którą pokazałeś wcześniej, program wykrywał spacje. To na pewno umiesz zrobić.

Poza tym wpisz w wyszukiwarce forum hasło: Jak "rozdzielić" ciąg danych w stringu?  Zobacz rozwiązanie.  (Temat był przerabiany dwa dni temu).
komentarz 11 marca 2018 przez kordel33 Nowicjusz (180 p.)
Bufferem widzę to robią, a moja funkcja wypisywała kolejne liczby do tablicy, a jak pętlą for(myślę że wiesz co mam na myśli) rozdzielić stringi w inty ? w sensie jaki warunek dać w for i żeby zamienialo ..
komentarz 11 marca 2018 przez Beginer Pasjonat (22,110 p.)
Zrób najpierw punkt 1., a jutro zajmiemy się punktem 2.
komentarz 11 marca 2018 przez kordel33 Nowicjusz (180 p.)
Mam pkt1 tylko pasuje mi jeszcze dzisiaj zrobić bo na jutro to muszę mieć :/
komentarz 12 marca 2018 przez Beginer Pasjonat (22,110 p.)
Nie damy rady tego dzisiaj zrobić. Za późno się za to zabrałeś.

Sorry!
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,826 wizyt
0 głosów
1 odpowiedź 242 wizyt
0 głosów
5 odpowiedzi 5,080 wizyt

92,536 zapytań

141,377 odpowiedzi

319,454 komentarzy

61,922 pasjonatów

Motyw:

Akcja Pajacyk

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

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...