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ę.
Edytor zaawansowany
  • alsor 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 24.11.05, 15:34
    w pętli wew. ma być:
    for(char *s = t1;
  • anna852 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 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 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 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

Popularne wątki

Nie pamiętasz hasła

lub ?

 

Nie masz jeszcze konta? Zarejestruj się

Nakarm Pajacyka