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

program ile razy występuje wyraz/litera w tekście

Ostatnio zmodyfikowano 2013-05-15 16:11
Autor Wiadomość
NHFL
Temat założony przez niniejszego użytkownika
program ile razy występuje wyraz/litera w tekście
» 2013-05-14 14:06:27
witam w 2h napisałem taki program i co prawda nie widzę w nim żadnych błedów ale chciałbym się zapytać profesjonalistów czy istnieją błędy wykonywalne ;) bo takie są najtrudniejsze do wykrycia

C/C++
#include <iostream>
#include <conio.h>
using namespace std;
int szukanyWyraz( string tekst, string wyraz )
{
    int ileRazy = 0;
    for( int x = 0; x < tekst.length(); x++ ) // zastosowalem tutaj znak < a nie <= poniewaz nie interesuje nas zero w ostatnim elemencie tablicy tekst[x] dopiero wykorzystamy zero w tablicy wyraz[y]
    {
        int y = 0; // potrzebne przypisanie do zera poniewaz to z zerowym elementem tablicy bedzie porównywac program obydwie tablice jest rowniez to 0 potrzebne do tego ze gdy program wyjdzie z pętli poniższej to aby kontynuowac musi znowu porownywac z zerowym elementem
        if( wyraz[ y ] == tekst[ x ] ) // gdy pierwsza litera wyrazu rowna sie literze ktora jako pierwsza wystąpi w tekscie to wchodz w pętle
        {
            for( int z = x; wyraz[ y ] == tekst[ z ]; z++ ) // petla sprawdza poprawnosc kolejnych występujących liter jesli pod rząd wystąpią wszystkie litery tablicy "wyraz" to patrz komentarz nizej jesli nie to wychodzi z pętli(program wraca do tego miejsca w ktorym ostatnim razem wszedl w pętle) no i znowu sprawdza czy pierwsza litera tablicy wyraz sie zgadza z tekstem
            {
                wyraz[ y++ ];
                if( wyraz[ y ] == 0 ) ileRazy++; // wlasnie tutaj korzystamy z wlasnosci ze string konczy sie zerem czyli gdy wszystkie pod rząd litery wyrazu beda sie zgadzaly w danym fragmencie tekstu i dojdziemy do ostatniego elementu tablicy wyraz to dodajemy +1 do licznika
               
            }
        }
    }
    return ileRazy;
}

int main()
{
    string tekst, wyraz;
    cout << "Podaj dowolny tekst: ";
    getline( cin, tekst );
    cout << "Jaki wyraz chcesz znalezc w tekscie: ";
    cin >> wyraz;
    cout << "slowo wystepuje w tekscie " << szukanyWyraz( tekst, wyraz ) << " razy";
    getch();
}
P-82917
pekfos
» 2013-05-14 15:00:40
C/C++
for( int z = x; wyraz[ y ] == tekst[ z ]; z++ )
{
    wyraz[ y++ ]; //A to co?
    if( wyraz[ y ] == 0 ) ileRazy++; // Zaliczasz i co?
   
}

P-82919
NHFL
Temat założony przez niniejszego użytkownika
» 2013-05-14 16:24:33
fakt powinno być samo y++;
a co do Twojego drugiego komentarza to nie rozumiem.
P-82933
pekfos
» 2013-05-14 16:36:00
Nie kończysz pętli. Będzie dalej sprawdzać, aż warunek się nie spełni, lub program wysypie.
P-82935
Bajt
» 2013-05-14 17:19:57
Cóż, według mnie, ten kod jest dosyć nieczytelny. Jeżeli chcesz faktycznie policzyć ile liter jest w tym wyrazie, to najlepiej użyć takiej prostej konstrukcji. Czy nie lepiej byłoby napisać to tak?
C/C++
unsigned int score;
int Count_Strings( std::string _string1, std::string _string2 )
{
    for( int i = 0; i < _string1.lenght() - 1; ++i )
    {
        if( _string1[ i ] == _string2 )
             ++score;
       
    }
    return score;
    // dalsza czesc kodu i zwrocenie wartosci funkcji
P-82941
pekfos
» 2013-05-14 17:41:49
Idąc dalej: Nie lepiej byłoby napisać to tak?
C/C++
int score = std::mismatch( str1.begin(), str1.end(), str2.begin() ).first - str1.begin(); //str2.size() >= str1.size()
P-82942
NHFL
Temat założony przez niniejszego użytkownika
» 2013-05-14 19:12:55
@Bajt
Nie da sie wykonac tego rodzaju porównania w dev c++
if( _string1[ i ] == _string2 )
pozatym powinno być .length() a nie .lenght() widać nie kompilowałeś tego programu
jeszcze dodam że nazwy typów nie powinny zaczynać się od '_' choć nie jest to sygnalizowane jako błąd ;)

@pekfos
pewnie to śmiałe posunięcie ale uważam że sie mylisz otóż pętla się kończy gdyż gdy warunek jest spełniony
if( wyraz[ y ] == 0 ) ileRazy++
 to po tym wraca do pętli podnosi z++ i sprawdza warunek
wyraz[ y ] == tekst[ z ]
 który już nie jest spełniony gdyz aktualnie w wyraz[y] jest 0 a to nie jest równe tekst[x] gdyż jest tam jakaś litera a raczej liczba(kod ASCII) na pewno różna od zera
P-82946
Bajt
» 2013-05-14 20:05:06
Co do tego co napisałeś to odpowiadam:
1. Rzeczywiście nie skompilowałem tego kodu. Dobry programista nie potrzebuje komputera do obmyślenia architektury programu. Sam tworzy go w głowie, więc jeśli w kodzie jest literówka to tylko dlatego, że spieszylem się pisząc go do posta.
2. Skoro dev c++ nie obsluguje języka programowania c++, to jaki z niego użytek?
3. Nie ma czegoś takiego jak nazewnictwo typów, tak jak napisałeś u góry. Nazewnictwo typów mozna zmienić za pomocą konstrukcji #typedef. Chyba chodziło ci o nazewnictwo zmiennych. Skoro tak to wiedz, że sam wiem jak nazywać zmienne. I sam wiem jakie ich nazwy są dozwolone. Dla twojej wiadomości, swego czasu popularne było zaczynanie nazw zmiennych od dolnego podkreslenia. Więc to, jak nazywam zmienne to moja sprawa.
P-82955
« 1 » 2
  Strona 1 z 2 Następna strona