Porównanie dwóch różnych łańcuchów tekstowych

0

Witam.
mam sobie takie zmienne:

string zmienna1;  //tablica zmiennych typu string - bardzo mi potrzebna
char zmienna2[99]; //zmienna typy char

Oraz chciałbym te łańcuchy porównać względem siebie, tzn.:
Jeśli zmienna2 będzie się równać zmienna1 ma się wykonać zdefiniowana po if-ie czynność.
zmienna2 (albo wpisany ciąg znaków) będzie stała, zmienna1 (stąd użycie tablicy stringów) będzie zmienna[n-ty element pętli].

Próbuje coś z tym zrobić ale dawno nie miałem styczności z c++ i pozapominałem trochę :(

Pomoże ktoś z tym ?

2
strcmp(zmienna1.c_str(), zmienna2);
//Lub
zmienna1 == string(zmienna2);
2
if( zmienna1 == zmiena2) 
{
     // cos
} 
2

Zakładając, że w zmienna2 będzie ciąg znaków zakończony nullem, to najwygodniej będzie

if (zmienna1 == string(zmienna2))

Jeśli zmienna2 się nie zmienia, to można przed pętlą raz zdefiniować taki std::string

string str2(zmienna2);
for (...)
    if (zmienna1 == str2)
0

Dzięki za wasze odpowiedzi. Po powrocie do domu postaram się wypróbować wasze propozycje.

EDIT
Mam jeszcze pytanko troszkę odbiegające od tematu. Przy otwarciu pliku przy parametrach ios::in oraz ios::app. Plik się utworzy jeśli nie istnieje, a dane będą dopisywane na końcu pliku ??

0

Wszystko działa jak chcę poza jednym przypadkiem, a mianowicie. W operacji na plik jest licznik linii, który (jak łatwo można się domyślić) liczy każdą wczytaną linię. Nie dział mi jeden ważny aspekt, otóż kiedy porównywany tekst jest równy licznik ma dodawać linie, w innym przypadku ma nie działać (licznik ma pomijać daną linię). Próbowałem robić pusty else (wstawiam else, który nic nie robi), próbowałem także nic nie wpisywać poza if-em i także nic. Znaczy efekt jest taki, że nawet jak linia nie zawiera danego tekstu także nią liczy.

Mam jeszcze pytanie. Mam sobie coś takiego:

string DTBLE, TIME;
time_t rawtime;
struct tm* timeinfo;
char buffer[80];
time(&rawtime);
timeinfo = localtime(&rawtime);
strftime(buffer, 80, "%Y%m%d%H%M%S", timeinfo);
string data(buffer);
string nowa;
DTBLE = data.substr(2, 6);
TIME = data.substr(8, 6);

Nie mogę przerobić tego na funkcję (zmiennych DTBLE i TIME używam w wielu miejscach aplikacji, a nie chce tego pisać w każdym potrzebnym miejscu). Może i głupie, ale nie wiem, jak zdefiniować funkcję, która będzie zwracać te dwie zmienne...

0
Kremius napisał(a):

Nie dział mi
Pokaż kod.

Może i głupie, ale nie wiem, jak zdefiniować funkcję, która będzie zwracać te dwie zmienne...

pair<string, string> foobar()
{
...
return make_pair(DTBLE, TIME);
}
0

robię to za pomocą prostego IF'a

string str1[99];
int zmienna;

if(zmienna1[i]=="tekst"){
zmienna=zmienna+1;
}else{
//nic ma nie robić.
}

kod napisany z pamięci, gdyż nie mam chwilowo dostępu do pliku

A jak użyć tych zmiennych, tzn przy wywołaniu funkcji muszę podać je jako argumenty, np.:

//funkcja oczywiście wcześniej zdefiniowana

funkcja(DTBLE, TIME);

??

0

Nazwij zmienne sensownie, zmienna, zmienna1, zmienna2 nic nie mówią.
Co to jest zmienna1? Jeśli to jest std::string to powinno być:

if (zmienna1 == "tekst")
0

poniżej pełny kod

fstream plik("plik.txt", ios::in);
do {
  string line;
  int linie;
  getline(plik, line);
  string sprawdz;
  sprawdz = line.substr(0, 3);
  if (sprawdz = "010") {
    linie = linie + 1;
  }
} while (!plik.eof());
plik.close();

tak wygląda pełny kod

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