fstream funkcja open - nie wczytuje stringa

Odpowiedz Nowy wątek
2015-01-08 18:06
0
#include <iostream>
#include <string>
#include <map>
#include <fstream>
#include <cstdlib>
#include <cctype>
using namespace std;
class mapa
{
    public:
        string sciezka;
        mapa(string a)
        {
            sciezka=a;
        }       
        mapa(void)
        {

        }
      void wczytaj(void)
        {
            int y=0;
            int x=48;
     map<string, int> slowa;

    ifstream plik;
 plik.open(sciezka.c_str(), fstream::in);
    if(plik.is_open())
    {    
    while(plik.good())
    {
        string s;
        getline(plik, s);            
        while(s.size() > 0)
        {
           int pozycja = s.find_first_of(' ');
            if(pozycja < 0)
                pozycja = s.size();
              if(s[pozycja-1]>(char)y && s[pozycja-1]<(char)x)
              {             
            string word = s.substr(0, pozycja-1);
            for(int i=0;i<word.length();i++)
            word[i]=tolower(word[i]);
            if(word !="")
            {            
            if (slowa.find(word) == slowa.end()) 
                    slowa[word] = 1; 
                else 
                    slowa[word]++;
                }
            s = s.erase(0, pozycja+1);
        }
        else
        {        
        string word = s.substr(0, pozycja);
         for(int i=0;i<word.length();i++)
            word[i]=tolower(word[i]);
            if(word !="")
            {            
            if (slowa.find(word) == slowa.end()) 
                    slowa[word] = 1; 
                else 
                    slowa[word]++;
                }
            s = s.erase(0, pozycja+1);
    }
}
    }

    }
        else
{
    throw "Podana sciezka dostepu do pliku nie istnieje!";
}

typedef map<string,int>::iterator iterator;
for(iterator p = slowa.begin(); p != slowa.end(); p++)
        cout << p->first << ": " << p->second << endl;

}
    };
    int main()
{
  string b; 
mapa maps(b);

cout<<"podaj sciezke"<<endl;
cin>>b;

    try
    {
        maps.wczytaj(); 
    }
    catch(const char* s)
    {
        cout<<s<<endl;
        cout<<"Prosze podac inna sciezke"<<endl;

    }    

}

Program ma za zadanie liczenie slow za pomocą biblioteki map. Wszystko się kompiluje i uruchamia ale przy wpisywaniu stringu ze ścieżka dostępu, tak jakby nie wczytuje mi tej scieżki. Rzuca wyjątek, a ścieżka która wpisuje jest na pewno poprawna( sprawdzałem wpisując ja bezpośrednio do funkcji open). Pewnie jest jakiś błąd w funkcji open, którego nie dostrzegam. Prosze o pomoc.

edytowany 1x, ostatnio: michalek1289, 2015-01-08 18:06

Pozostało 580 znaków

2015-01-08 18:11
0
michalek1289 napisał(a):

fstream funkcja open - nie wczytuje stringa
I bardzo dobrze, tak powinno być, funkcja open powinna plik otworzyć a nie stringa wczytywać.


Wykonuję programy na zamówienie, pisać na Priv.
Asm/C/C++/Pascal/Delphi/Java/C#/PHP/JS oraz inne języki.

Pozostało 580 znaków

2015-01-08 18:11
1
string b; 
mapa maps(b);

cout<<"podaj sciezke"<<endl;
cin>>b;

W jaki sposób to ma działać? Najpierw tworzysz obiekt za pomocą pustego stringa, a dopiero potem wczytujesz ten string z klawiatury.


"(...) otherwise, the behavior is undefined".
edytowany 1x, ostatnio: Endrju, 2015-01-08 18:11
Dzięki. Rzeczywiście głupi błąd. Poprawiłem i działa. - michalek1289 2015-01-08 21:51

Pozostało 580 znaków

Odpowiedz
Liczba odpowiedzi na stronę

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