Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

Pomoc przy bocie

Ostatnio zmodyfikowano 2011-08-07 21:44
Autor Wiadomość
Holdysz
Temat założony przez niniejszego użytkownika
Pomoc przy bocie
» 2011-08-07 16:56:06
W c++ robię bota i mam 2 pytania ale zanim je zadam przedstawię kod programu
C/C++
string pyt; //string pyt
start: //etykieta start
cout << "\nPogadaj ze mna:\n " << endl; //string pyt
getline( cin, pyt ); //string pyt

//IFY!
//POWITANIA
if( pyt == tekst1[ 0 ] || pyt == tekst1[ 1 ] || pyt == tekst1[ 2 ] || pyt == tekst1[ 3 ] || pyt == tekst1[ 4 ] || pyt == tekst1[ 5 ] || pyt == tekst1[ 6 ] || pyt == tekst1[ 7 ] || pyt == tekst1[ 8 ] || pyt == tekst1[ 9 ] || pyt == tekst1[ 10 ] || pyt == tekst1[ 11 ] || pyt == tekst1[ 12 ] || pyt == tekst1[ 13 ] )
{
    cout << "\nWitaj!\n";
   
}
1.Chciałbym zrobić tak aby nie trzeba było pisać nowych zmiennych string np.
C/C++
string tekst[ 3 ];
tekst[ 0 ] = "co lubisz?";
tekst[ 1 ] = "co ty lubisz";
tekst[ 2 ] = "lubisz cos?";
tylko jakoś tak żeby była jedna zmienna string tekst="lubisz" i jak ją napiszę w zdaniu to aby program jak zobaczy słowo lubisz to wiedział ok jaką zmienną chodzi i wypisał odpowiedni tekst na ekranie.
2.Pytanie drugie to mniej skomplikowane bo chodzi o to że jak mam w środku if napisane cout<<"\nWitaj\n"; to żeby program mógł sobie losować spośród 2 odpowiedzi np. cout<<"witaj\n"; i cout<<"siema\n"; a wyświetlał na ekranie tylko jedną.Chodzi o to że raz tą a jak zaś napisze siema to odpisze drugą odpowiedź.Męcze się nad tymi rzeczami od 3 dni i nie mogę tego wykonać,to tyle oczekuję pomocy.
P-38341
m4tx
» 2011-08-07 17:04:05
Hm, skoro piszesz linguabota, warto by lepiej znać C++, bo pytania, jakie zadajesz są trywialne... No, ale ok.

1. Hm... Wyszukujesz w tekście spację, rozdzielasz w taki sposób pojedyncze słowa do tablicy (vector najlepiej), a potem przelatujesz po całej tablicy i szukasz tego słowa. Z tego co mi wiadomo, szukanie w tablicy jest również w nagłówku algorithm.
2. Zrób sobie tablicę stringów z odpowiedziami, i jak masz np. 10 elementów w tej tablicy, to dajesz np.
cout << tablica_odpowiedzi[ rand() % 10 ]
.
P-38343
Mrowqa
» 2011-08-07 17:11:07
tylko jakoś tak żeby była jedna zmienna string tekst="lubisz" i jak ją napiszę w zdaniu to aby program jak zobaczy słowo lubisz to wiedział ok jaką zmienną chodzi i wypisał odpowiedni tekst na ekranie.
Przy takim bocie to jest raczej harówa niż myślenie... musisz czytać do jednego stringa i albo porównywać z innym (co polecam - można wczytać np. bazę z pliku :P) albo po prostu dostałej.
2.Pytanie drugie to mniej skomplikowane bo chodzi o to że jak mam w środku if napisane cout<<"\nWitaj\n"; to żeby program mógł sobie losować spośród 2 odpowiedzi np. cout<<"witaj\n"; i cout<<"siema\n"; a wyświetlał na ekranie tylko jedną.Chodzi o to że raz tą a jak zaś napisze siema to odpisze drugą odpowiedź.Męcze się nad tymi rzeczami od 3 dni i nie mogę tego wykonać,to tyle oczekuję pomocy.
Losować czy wybierać ?? ;P
C/C++
string odp;
// wczytujemy sobie cos
cout <<( odp == "Witaj" ? "siema!\n": "Witaj!\n" );
// losowanie :
// cout << ( rand() % 2 ? "siema!\n" : "Witaj!\n" );
O to chodzi?? :P

PS dla zrozumienia:
wyrażenie logiczne ? wartość jeżeli prawda : wartość jeżeli fałsz
Nawiasy są dlatego, bo operator
<<
 jest silniejszy od
?:
 :)
P-38345
mati1qazxsw2
» 2011-08-07 17:40:03
Źle piszesz tego bota powiem Ci, poczytaj o dynamicznej alokacji pamięci, zapisie list do pliku i pogrupuj odpowiednio odpowiedzi ze względu na intencje/humor itp., program powinien się uczyć poprzez wypytanie o sens nieznanego słowa.

@Mrowqa Twój numer wypowiedzi to liczba szatana :E
P-38347
Mrowqa
» 2011-08-07 19:09:31
Hahaha!!! xD
Tobie zostało jeszcze 602 postów :P
P-38356
SeaMonster131
» 2011-08-07 21:44:12
Ostatnio też takiego mini-bocika tworzyłem, ale akurat żeby sobie WinAPI ciut przypomnieć :P
Ja to zrobiłem tak:
C/C++
string pWitam[] = { "elo", "siema", "witaj", "witam", "czesc" }; //5 elementow
//itd...
string pytanie;
int found;
//...

for( int i = 0; i < 50; i++ )
{
   
    if( i < 5 ) //pWitam
    {
        found = pytanie.find( pWitam[ i ] );
        if( found != string::npos )
        {
            int odp = rand() % 100;
            if( odp <= 25 )
            { rozmowa += "Edek:  Czesc :)\r\n"; break; }
            else if( odp > 25 && odp <= 50 )
            { rozmowa += "Edek:  Witam ;)\r\n"; break; }
            else if( odp > 50 && odp <= 75 )
            { rozmowa += "Edek:  Siemka\r\n"; break; }
            else
            { rozmowa += "Edek:  Witaj!\r\n"; break; }
        }
    }
    //...
   
}

czyli jeżeli w pytaniu znajdzie sie wyraz, który znajduje się w tablicy stringów pWitam[] to losuje liczbe i wyświetla odpowiednie powitanie :) Spisywało sie świetnie :P
P-38365
« 1 »
  Strona 1 z 1