Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

Porównanie dwóch zmiennych string.

Ostatnio zmodyfikowano 2011-02-09 01:43
Autor Wiadomość
Vercevales
Temat założony przez niniejszego użytkownika
Porównanie dwóch zmiennych string.
» 2011-02-07 17:29:02
Mam zadanie, w którym pobrane z pliku słowo trzeba sprawdzić czy nie jest palindromem (od przodu jest takie samo jak od tyłu, np "kajak").
Z odwracaniem sobie poradziłem, z pomocą przyszedł Wujek Google.
Ale porównać nie mogę, próbowałem już strcmp, compare, oraz zwykłe porównanie i nic.
C/C++
#include <iostream>
#include <fstream>
#include <algorithm>
#include <string>
#include <cstring>
#include <string.h>


int main()
{
    std::fstream dane;
    std::fstream zadanie4;
    dane.open( "/home/karol/Pobrane/Matura informatyka/Dane_PP/dane.txt", std::ios::in );
    zadanie4.open( "/home/karol/Pobrane/Matura informatyka/Dane_PP/zadanie4.txt", std::ios::out );
    std::string poprawna;
    std::string odwrotna;
   
   
   
   
    while( dane.eof() != true )
    {
        getline( dane, poprawna );
        std::cout << poprawna << std::endl;
        odwrotna = poprawna;
       
        reverse( odwrotna.begin(), odwrotna.end() );
        std::cout << odwrotna << std::endl;
       
        if( poprawna == odwrotna )
        {
            std::cout << "tu byłem " << std::endl;
            zadanie4 << odwrotna;
        };
    }
   
    dane.close();
    zadanie4.close();
   
    return 0;
   
}

gdy w warunku dam
C/C++
if( strcmp( poprawna, odwrotna ) == false )

to wyskoczy

error: cannot convert ‘std::string’ to ‘const char*’ for argument ‘1’ to ‘int strcmp(const char*, const char*)’

z użyciem
C/C++
if( poprawna.compare( odwrotna ) == 1 )
zapisuje wszystkie w odwrotnej kolejności, a gdy dam
C/C++
if( poprawna.compare( odwrotna ) == 0 )
to nie zapisze niczego...

Dlaczego?
P-27967
ison
» 2011-02-07 17:48:51
C/C++
if( strcmp( poprawna.c_str(), odwrotna.c_str() ) == false )
chociaż nie wiem po co Ci strcmp skoro dla std::string masz operator ==
P-27968
Vercevales
Temat założony przez niniejszego użytkownika
» 2011-02-07 17:54:02
nie działa :(
Nie zapisuje niczego, nie wyświetla też "tu byłem" czyli w ogóle nie wchodzi w pętlę
P-27969
Vercevales
Temat założony przez niniejszego użytkownika
» 2011-02-07 17:55:17
if( poprawna == odwrotna )
jeżeli o to chodzi, to nie działa
P-27970
ison
» 2011-02-07 17:59:11
tak, nawet Twój pierwszy program, który podałeś jest poprawny
jesteś pewien, że plik, który otwierasz istnieje? :)
u mnie działa bez zarzutu
P-27971
Vercevales
Temat założony przez niniejszego użytkownika
» 2011-02-07 18:02:29
Pliki istnieją, i są otwierane, bo sprawdziłem zadanie4.good() i dane.good()
a poza tym zapisy do nich się dokonują tylko nie tak jakbym chciał ;/
P-27972
ison
» 2011-02-07 18:03:52
chodzi o nową linię w pliku?
C/C++
zadanie4 << odwrotna << std::endl;

spróbuj wypisać zawartość pliku dane przed tym while'em

out dla słowa kajak w pliku dane:
kajak
kajak
tu by│em
P-27973
Vercevales
Temat założony przez niniejszego użytkownika
» 2011-02-07 18:09:21
Tam jest tysiąc (dosłownie) słów :O


słowa zapisane linijka po linijce, gdy ja je zapisuję w zadanie4.txt to też się zapisują linijka po linijce.

link:
http://www.cke.edu.pl/images/stories/Arkusze_matura_09/informatyka/PP/Dane_pp.rar

Te warianty też nie działają:
C/C++
std::string * wsk_pop = & poprawna;
std::string * wsk_odw = & odwrotna;

if( wsk_pop == wsk_odw )
{
    std::cout << "tu byłem " << std::endl;
    zadanie4 << odwrotna;
};

i ten:

C/C++
std::string * wsk_pop = & poprawna;
std::string * wsk_odw = & odwrotna;

if( * wsk_pop == * wsk_odw )
{
    std::cout << "tu byłem " << std::endl;
    zadanie4 << odwrotna;
};
P-27974
« 1 » 2 3 4
  Strona 1 z 4 Następna strona