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

[Symfonia C++] tablicowanie parametrów wywołania programu.

Mały hosting, OGROMNE możliwości
0 głosów
581 wizyt
pytanie zadane 4 lutego 2016 w C i C++ przez Patryk Krajewski Nałogowiec (26,170 p.)

Witam wszystkich,

Rozwiązywałem sobię ostatnie zadanie w rozdziale 22. Treśc:

Napisz program, który wywoływany będzie z wieloma parametrami będącymi bądź to liczbami(zmiennoprzecinkowymi), bądź to wyrazami. Parametrow tych może być dowolnie dużo i nigdy nie wiesz, który z nich będzie liczbą, a który słowem. W programie wszystkie parametry, które są zapisem liczb poumieszczaj w tablicy double. Wszystkie nie-liczby zgromadz w tablicy obiektówe typu string. Wypisz na ekranie zawartość obu tablic.

Do tej pory napisałem taki program:

#include <iostream>
#include <vector>
#include <sstream>
using namespace std;


int main(int argc, char **argv)
{
    vector <string> words; //Vector przechowujacy wyrazy
    vector <double> numbers; //Vector przechowujacy liczby
    stringstream strumien;

    for(int i = 1; i < argc; i++)
    {
        strumien.str("");
        double liczba = 0;

        strumien << argv[i];
        strumien >> liczba;

        if(!strumien) //Jesli ustawiona jest flaga bledu w strumienie strumien
        {
            strumien.clear(strumien.rdstate() & ~ios::failbit); //Usuniecie flagi bledu
            words.push_back(strumien.str()); //Dodanie do vectora words
        }
        else //Jesli wszystko jest w porzadku
        {
            numbers.push_back(liczba);
        }
    }

    cout << "Parametry:\n"
         << "Liczby:\n";
    for(int i = 0; i < numbers.size(); i++)
    {
        cout << numbers[i] << endl;

    }
    cout << "wYRAZY\n";
    for(int i = 0; i < words.size(); i++)
    {
        cout << words[i] << endl;

    }

}

 

Wszystko jest dobrze jeśli wypisuje elementy zerowe tablic, ale dalej już nie. Proszę o pomoc.

1 odpowiedź

+1 głos
odpowiedź 4 lutego 2016 przez mustarrrd Obywatel (1,450 p.)
wybrane 4 lutego 2016 przez Patryk Krajewski
 
Najlepsza
#include <iostream>
#include <vector>
#include <sstream>
using namespace std;

int main(int argc, char **argv)
{
    vector<string> words;
    vector<double> numbers;
    stringstream strum;

    for( int i = 1; i < argc; i++ )
    {
        strum.str("");
        double liczba;
        strum << argv[i];
        strum >> liczba;

        if( strum.fail() )
            words.push_back( argv[i] );
        else
            numbers.push_back( liczba );

        strum.clear();

    }

    cout << "Liczby:\n";
    for(int i = 0; i < numbers.size(); i++)
    {
        cout << numbers[i] << endl;
    }

    cout << "\nWyrazy:\n";
    for(int i = 0; i < words.size(); i++)
    {
        cout << words[i] << endl;
    }

}

 

Podobne pytania

+1 głos
0 odpowiedzi 623 wizyt
+1 głos
3 odpowiedzi 1,212 wizyt
0 głosów
2 odpowiedzi 525 wizyt
pytanie zadane 25 marca 2016 w C i C++ przez CortezjuszPospolity Obywatel (1,130 p.)

93,718 zapytań

142,631 odpowiedzi

323,262 komentarzy

63,266 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

Twierdza Linux. Bezpieczeństwo dla dociekliwych

Aby uzyskać rabat -10%, użyjcie kodu pasja-linux, wpisując go w specjalne pole w koszyku.

...