• 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,868 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 Beginer Pasjonat (22,110 p.)
Nie bardzo rozumiem. To dałoby się zapisać w jednej komórce tablicy (sumując wszystkie stringi) ale czy w tym zadaniu na pewno o to chodzi?
komentarz 11 marca 2018 przez kordel33 Nowicjusz (180 p.)
Liczby stanowią ciąg, muszę sprawdzić czy ciag wgl jest arytmetyczny i wypisać największą różnicę
komentarz 11 marca 2018 przez Beginer Pasjonat (22,110 p.)
Ale to jest zupełnie inne zadanie. Mam jeszcze większy mętlik w głowie.

Musisz się na coś zdecydować. Przedstaw jasno, porządnie.
komentarz 11 marca 2018 przez kordel33 Nowicjusz (180 p.)
To jak z pliku pobrać liczby do tablicy i sprawdzić czy to ciąg aryt. ?
komentarz 11 marca 2018 przez mokrowski Mędrzec (155,460 p.)
A jakich narzędzi/nagłówków wolno Ci użyć? (czyli co znasz lub co jest dopuszczane przez prowadzącego/prowadzącą zajęcia).
komentarz 11 marca 2018 przez kordel33 Nowicjusz (180 p.)
Bardziej "prymitywnymi" metodami --- funkcje, pętle
 

Dla przykładu funkcja lecz inaczej działająca :
 

void przypisanie(string str)
{
        string ciag = "";

        for (int i = 0; i < str.length(); i++)
        {
            if (str[i] == ' ')
                break;
            ciag += str[i];
        }

}
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,829 wizyt
0 głosów
1 odpowiedź 242 wizyt
0 głosów
5 odpowiedzi 5,095 wizyt

92,555 zapytań

141,403 odpowiedzi

319,557 komentarzy

61,940 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!

...