c++ problem z porównywaniem stringów

0

program wyszukuje w stringu "utl1" jedno lub dwuliterowe fragmenty i porównuje ze stringiem "wyb". jeżeli łańcuchy są takie same, do stringa "pob" wpisuje napis "1", zaś jeżeli są różne, napis "0". jak widzimy, zawartość stringa "wyb" (czyli "K") jest taka sama jak jeden z fragmentów stringa "utl1". niestety program za każdym razem wyświetla napis "0". co tu jest źle?

tak wygląda mój problem:

int y=0 , x=0 ;
string utl, utl1, pob, wyb ;

wyb = "K";

utl1 = "H*Li*K*Na*Rb#" ;

while( y != utl1.length() )
           {
                  utl = utl1[y] ;
                  if( utl1[y+1] != 42 )
                  {
                      utl += utl1[y+1] ;
                      y = y + 3 ;
                  }
                  else
                  y = y + 2 ;
                  
                  cout << utl << endl ;
                  if( utl == wyb )
                  pob[x] = 49 ;
                  else
                  pob[x] = 48 ;
           }
cout << pob[x] << endl ;
 
0

Hmm, a to sie przypadkiem nie sprowadza do tego samego, żeby porównać po prostu 2 stringi i jeśli są równe na którejś pozycji, to wpisać do tablicy 1?
Robisz 2 pętle for dla wzorca oraz dla tekstu. Sprawdzasz po kolei kolejne indexy w obu stringach. Jeśli są takie same to dopisujesz do tablicy 1, jeśli różne to 0. Wszystko.

0

no nie wiem czy to łatwiejsze. niektóre fragmenty do sprawdzenia są jedno, a inne dwuliterowe wiec musze sprawdzac czy druga litera nie jest gwiazdką w tym łańcuchu w którym są fragmenty oddzielone gwiazdkami. w sumie wychodzi to tak:

 
for( y=0 ; y<11 ; y++ )
{
     if( utl[y] > 64 && utl[y] < 91 )
     {
         if( utl1[y+1] != 42  )
         {
             if( utl1[y] == wyb[y] )
             {
                 if( utl[y+1] == wyb[y+1] )
                 pob[x] = 49 ;
                 else
                 pob[x] = 48 ;
             }
         }
         else
         {
             if( utl1[y] == wyb[y] )
             pob[x] = 49;
             else
             pob[x] = 48;
         }
     }
}

lepiej by było powiedziec czemu metoda z pierwszego postu nie działa.

1

O coś takiego Ci chodzi?

#include<iostream>
#include<string>
using namespace std;
int main(){
    
string utl, utl1, pob, wyb ;
wyb = "K";
utl1 = "H*Li*K*Na*Rb#" ;

for(int i=0;i<utl1.length();i++){
    for(int j=0;j<wyb.length();++j){
        if(utl1[i]!=42){
         if(utl1[i]==wyb[j]) pob+="1";
        else pob+="0";
         }
        }
    }
cout<<pob<<endl;
}
0

wyb = "K" podałem dla przykładu. w programie string wyb może występować także jako fragment dwuliterowy. ale jak sie zmieni szczegół:

 
for(int i=0;i<utl1.length();i++)
{
	for(int j=0;j<wyb.length();++j)
	{
		if(utl1[i+j]!=42)
		{
			if(utl1[i+j]==wyb[j])
			pob+="1";
			else pob+="0";
		}
	}
}
cout<<pob<<endl;
}

to chyba będzie dobrze, więc thx.

0

Po co się męczyć, niech biblioteka cię wyręczy: strstr.

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