[C++] dubbio programma confronto stringhe

Messaggioda mpg » 24/02/2019, 14:17

è un programma di confrontro stringhe, non risco a capire bene il significato dentro il while in particolare quei '\0':
(s1[i]!='\0' && s2 [i]'\0' )
Cosa significa?

Codice:
#include <iostream>
#include <string>
#include <ctime>
#include <cmath>
#include <cstdlib>

using namespace std;
bool confrontostringhe (string s1, string s2)
{
   int i=0;
   
   // se le stringhe sono diverse
   //allora le stringhe non sonon uguale
   if (lunghezzastringa(s1) !=  lunghezzastringa(s2))
    return false;
   while (s1[i]!='\0' && s2 [i]'\0' )
    {if (s1 [i]!=s2 [i])
    return false;
}
return true;
}
mpg
Average Member
Average Member
 
Messaggio: 228 di 654
Iscritto il: 28/11/2017, 09:35

Re: [C++] dubbio programma confronto stringhe

Messaggioda apatriarca » 24/02/2019, 19:43

Il codice così scritto non ha senso in quanto usa la classe std::string del C++ per i suoi parametri, ma l'implementazione assume che le stringhe siano in realtà degli array di char che terminano con il carattere '\0'. Devi insomma decidere se usare un tipo di stringhe o l'altro e agire di conseguenza. Le due possibili alternative sono le seguenti. Nota che nel caso di array di char non ho calcolato la lunghezza in quanto richiede di iterare su tutta la stringa in cerca di '\0'.

Codice:
bool compare_str(std::string a, std::string b)
{
   if (a.size() != b.size()) { return false; }

   for (std::size_t i = 0; i < a.size(); ++i) {
      if (a[i] != b[i]) { return false; }
   }

   return true;
}

bool compare_cstr(const char a[], const char b[])
{
   assert(a != NULL && b != NULL);

   int i;
   for (i = 0; a[i] != '\0' && b[i] != '\0'; ++i) {
      if (a[i] != b[i]) { return false; }
   }

   // Questa condizione verifica se hanno la stessa lunghezza
   // Cioè a[i] == '\0' e b[i] == '\0'.
   return a[i] == b[i];
}
apatriarca
Moderatore
Moderatore
 
Messaggio: 5197 di 10436
Iscritto il: 08/12/2008, 20:37
Località: Madrid


Torna a Informatica

Chi c’è in linea

Visitano il forum: Nessuno e 1 ospite