Dodaj do ulubionych

Łańcuchy znakowe C++

23.11.05, 22:28
Mam do napisania taki oto program:
Należy pobrać od użytkownika dwa łańcuchy znaków (max. 20 znaków), a następnie
tak zmodyfikować pierwszy z nich aby zastąpić gwiazdką te wszystkie jego
znaki, które również występują w drugim łańcuchu (np. dla łańcuchów: "Ala ma
kota" i "osa" wynikiem będzie "Al* m* k*t*).
Napisałam taki programik ale niestety nie do końca działa on poprawnie.

#include <iostream>
#include <stdlib.h>

using namespace std;

int main(int argc, char *argv[])
{
char t1[20];
char t2[20];
int i;
cout<<"\n Wpisz pierwszy tekst (max. 20 znakow) : ";
cin.getline (t1, 20);
cout<<"\n Wpisz drugi tekst (max. 20 znakow) : ";
cin.getline (t2, 20);
for (i=0; i<t1[i]; i++)
{
if (t1[i]==t2[i])
t1[i]='*';
cout<<t1[i];
}
cout<<"\n";
system("PAUSE");
return 0;
}

Bardzo proszę o poprawę tego programiku. Z góry dziekuję.
Obserwuj wątek
    • alsor Re: Łańcuchy znakowe C++ 24.11.05, 15:32
      char t1 [21], t2[21]; // jest jeszcze zero na koncu

      ...

      for(char *p = t2; *p != 0; p++)
      {
      for(char *s = t2; *s != 0; s++)
      if( *s == *p ) *s = '*';
      }
      • alsor Re: Łańcuchy znakowe C++ 24.11.05, 15:34
        w pętli wew. ma być:
        for(char *s = t1;
        • anna852 Re: Łańcuchy znakowe C++ 25.11.05, 20:55
          Poprawiłam program ale niestety nadla nie działa. Nie wiem może coś źle robię.
          Proszę pomóżcie.
          A oto jak wygląda teraz ten programik:

          #include <iostream>
          #include <stdlib.h>

          using namespace std;

          int main(int argc, char *argv[])
          {
          char t1[21];
          char t2[21];
          int i;
          cout<<"\n Wpisz 1 tekst (max. 20 znakow) : ";
          cin.getline (t1, 21);
          cout<<"\n Wpisz 2 tekst (max. 20 znakow) : ";
          cin.getline (t2, 21);

          for(char *p = t2; *p != 0; p++)
          {
          for(char *s = t1; *s != 0; s++)
          if( *s == *p )
          *s = '*';
          }

          cout<<t1[i];
          cout<<"\n";
          system("PAUSE");
          return 0;
          }

          • daanieel Re: Łańcuchy znakowe C++ 25.11.05, 23:49
            jak chcesz ze wskaznikami to potrzeba Ci takiej petli

            for(char *p = t1; *p != 0; p++) {
            for(char *s = t2; *s != 0; s++) {
            if(*p == *s) *p = '*';
            }
            cout << *p;
            }
    • daanieel Re: Łańcuchy znakowe C++ 25.11.05, 23:37
      sprobuj cos takiego

      #include <iostream>
      #include <stdlib.h>

      using namespace std;

      int main(int argc, char *argv[])
      {
      char t1[21];
      char t2[21];
      int i,j;
      cout<<"\n Wpisz pierwszy tekst (max. 20 znakow) : ";
      cin.getline (t1, 21);
      cout<<"\n Wpisz drugi tekst (max. 20 znakow) : ";
      cin.getline (t2, 21);
      for (i=0; i<t1[i]; i++)
      {
      for(j=0; j<t2[j]; j++)
      {
      if (t1[i]==t2[j])
      t1[i]='*';
      }
      cout<<t1[i];
      }
      cout<<"\n";
      system("PAUSE");
      return 0;
      }
      • alsor Re: Łańcuchy znakowe C++ 26.11.05, 20:06
        Tu nawet nie ma co źle działać.

        tablica ma rozmiar minimum 21, czytasz 20:
        cin.getline (t2, 20); // 20 + zero koncowe = 21

        warunek pętli w postaci:
        i < t1[i] - co to ma robić!?
        przecież t[i] to jakiś znak, a 'i' jest liczbą od 0 do 19

Nie masz jeszcze konta? Zarejestruj się

Nie pamiętasz hasła lub ?

Nakarm Pajacyka