ďťż

Ładny brzuch

Napisałem taki kod w C++

#include <iostream>
#include <fstream>
#include <string>
#include <vector>
using namespace std;

int main()
{
vector<string> v;
int liczba_slow;
string word;
string slowo_szukane;
cout << "Podaj slowo: ";
cin >> slowo_szukane;
ifstream in("nazwa_pliku.cpp");
while(in >> word)
{
v.push_back(word);
if (word == slowo_szukane)
liczba_slow=liczba_slow + 1;
}
cout << "Slowo: " << slowo_szukane << " wystapilo: " << liczba_slow << endl;
system("pause");
}

Program się kompiluje, ale po podaniu słowa, którego ilo?ć chce się policzyć to pokazuje liczbe która ma ok. 10 cyfr. Może kto? wie jak to zrobić żeby działało?

There's More Than One Way To Do It



Zapisz ten program w katalogu pod konkretną nazwą i odpal z tego katalogu.

cytat:Codix napisał:

Napisałem taki kod w C++

#include <iostream>
#include <fstream>
#include <string>
#include <vector>
using namespace std;

int main()
{
vector<string> v;
int liczba_slow;
string word;
string slowo_szukane;
cout << "Podaj slowo: ";
cin >> slowo_szukane;
ifstream in("nazwa_pliku.cpp");
while(in >> word)
{
v.push_back(word);
if (word == slowo_szukane)
liczba_slow=liczba_slow + 1;
}
cout << "Slowo: " << slowo_szukane << " wystapilo: " << liczba_slow << endl;
system("pause");
}

Program się kompiluje, ale po podaniu słowa, którego ilo?ć chce się policzyć to pokazuje liczbe która ma ok. 10 cyfr. Może kto? wie jak to zrobić żeby działało?

zamiast tego:
if (word == slowo_szukane)
zrob tak:
if(word.c_str() == slowo_szukane.c_str())

a najlepiej bedzie jak te stringi bedziesz porownywal np. w jakiejs petli po jednym znaku.

cytat:Codix napisał:

I jeszcze jedno.
Tam gdzie tworzysz zmienna liczba_slow, przypisz do niej najlepiej 0.
Zamiast:
int liczba_slow;
Napisz:
int liczba_slow = 0;

powinno to zadzialac.



cytat:Igor napisał:

cytat:Codix napisał:

I jeszcze jedno.
Tam gdzie tworzysz zmienna liczba_slow, przypisz do niej najlepiej 0.
Zamiast:
int liczba_slow;
Napisz:
int liczba_slow = 0;

powinno to zadzialac.

Po napisaniu tego postu u#339;wiadomi³em sobie, ¿e nie zainicjowa³em "0" tej zmiennej. Teraz dzial³a tak jak chcia³em, ale dziêki wszystkim za odpowiedz.

There's More Than One Way To Do It

cytat:Igor napisał:

zamiast tego:
if (word == slowo_szukane)
zrob tak:
if(word.c_str() == slowo_szukane.c_str())

a najlepiej bedzie jak te stringi bedziesz porownywal np. w jakiejs petli po jednym znaku.

:shock::shock::shock: if(word.c_str() == slowo_szukane.c_str()) ?????????

Mam zagadkę! Co daje powyższy kod?? Lub taki: if(napis == "Hello")

Jeśli odpowiedź padła - porównuje dwa teksty, to jest to odpowiedź błędna!!!

W C++ typ char* to nie jest żaden tam typ tekstowy, tylko wskaźnik na miejsce w pamięci, pod którym występuje zmienna znakowa. Nie będę powtarzał, http://www.ks-eksper...?TOPIC_ID=13573. Funkcja std::string::c_str() zwraca nic innego, jak const char* ; zresztą zapis "Jakis Tekst" powoduje umieszczenie przez kompilator w programie tekstu "Jakis Tekst", i wstawienie w miejscu wystąpienia tej instrukcji stałą typu const char*. Takie porównanie bada więc nie tekst, a jego położenie w pamięci, czyli wartość wskaźników (wskaźnik to też liczba, 4 bajtowa, jak ktoś chce sprawdzić, to proszę: std::cout << reinterpret_cast<unsigned int>(jakis_tekst); ).

Pozdrawiam, TeMPOraL

//================================================
KĄESACP: Komputer Ąwiat - Expert Society Against Crap Posting
To join: Put these lines in your signature and don't post crap!
"E = mc... dolen taken my notepad!" - Terran Science Vessel (StarCraft)
GG: 1488052 | temporal@poczta.fm | [url]http://www.temporal-software.prv.pl

cytat:TeMPOraL napisał:

Masz racje. Dobrze ze zauwazyles moj blad. Nie wiem skad mi to przyszlo do glowy, chyba przez ten upal i duszne powietrze:)

Zapis:
if (word == slowo_szukane)
jest poprawny.

cytat:Igor napisał:
Zapis:
if (word == slowo_szukane)
jest poprawny.

Niestety ten "if" nie zawsze działa, więc według mnie bezpieczniej jest porównywać za pomocą strcmp(string1,string2) ;)

Abit KT7A-Raid, Athlon 1.53 GHz, 512 MB SDR, R9200 Pro (@308/486), 2x Barracuda.7 40 GB (RAID-0), Vortex2, Fortron 300W, audio 350W, Win XP Pro SP1 + cisza :)

cytat:rzymo napisał:
Niestety ten "if" nie zawsze działa, więc według mnie bezpieczniej jest porównywać za pomocą strcmp(string1,string2) ;)

Ja siê dopiero uczê c++ i dla moich skromnych potrzeb narazie wystarcza "if", a narazie podczas testowania programu to mi nie pope³nia³ b³êdów (pokazywa³ poprawn¹ ilo#339;æ s³ów.

There's More Than One Way To Do It

  • zanotowane.pl
  • doc.pisz.pl
  • pdf.pisz.pl
  • zsf.htw.pl
  •