Wskaźnik do tablicy wskaźników typu char (wskaźnik do char * argv[])

0

Witam, jestem początkującym "programistą" w C++, tzn. kompletnie mi to nie wychodzi. Staram się rozwiązać problemy z ostatniego kolokwium i mam takie o to zadanko:
"W funkcji main zadeklarowano tablicę przechowującą słowa jako łańcuchy znaków (char*). Napisz funkcję która sprawdzi czy w tablicy znajduje się poszukiwane słowo. Funkcja powinna przyjmować wskaźnik do tej tablicy, jej wielkość, oraz poszukiwane słowo, oraz zwracać wartość prawda lub fałsz w zależności od rezultatu."

Kombinowałem już na kilka sposobów, program kompiluje, prawidłowo przyjmuje argumenty wywołania (specjalnie napisałem pętle wypisującą te argumenty) ale niestety nie działa prawidłowo, tj. funkcja zawsze zwraca false, nawet jeśli podam prawidłowe słowo.

Tu kod mojego programu

#include <iostream>
#include <string>
using namespace std;

bool szuka_slowo(char (*argv[]), int argc, char * slowo)
{
    for (int i = 0; i < argc; i++)
    {
        if (strcmp(argv[i], slowo) ==  0)
        {
            cout << "poprawna odpowiedz\n";
            return true;
        }
        else 
        {
            cout << "niepoprawna odpowiedz\n";
            return false;
        }
    }
}

int main(int argc, char* argv[])
{
    char slowo;
    cout << "podaj szukane slowo:\n";
    cin >> slowo;

    cout << "program wypisze argumenty wywolania\n";
    cout << "//////////////////////\n";
    for (int i = 0; i < argc; i++)
    {
        cout << argv[i] << '\n';
    }
    cout << "//////////////////////\n";
    
    bool odpowiedz = szuka_slowo(argv, argc, &slowo);
    cout << odpowiedz << '\n';
    system("PAUSE");
} 

Proszę o wyrozumiałość, pewnie błąd jest banalny ale ja już nie daje rady. Przekopałem internet, książki i nie mogę znaleźć rozwiązania na ten problem. Może po prostu brak mi wyobraźni by pojąć te wskaźniki. Jedyne co mi przychodzi do głowy to to, że błąd tkwi w w 5 linii kodu "char (*argv[])" ponieważ w poleceniu napisane jest, że funkcja ma przyjmować wskaźnik do tej tablicy, a argv sam w sobie jest tablicą wskaźników na obiekty typu char. Zależy mi, żeby chociaż trochę załapać tego C++, bo prawdopodobnie będę szykował się na kolokwium poprawkowe. Proszę o wszelkie rady, czy też źródła gdzie mógłbym znaleźć odpowiedź na moje pytanie.

Pozdrawiam,
xartez.

0
bool contains(const char** src, const char* phrase, size_t size) {
	for(size_t i = 0; i < size; ++i) {
		if((string(src[i])).find(phrase) != string::npos) {
			return true;
		}
	}
	return false;
}

http://ideone.com/zEPFlV

Edit: #blad w rozumieniu tresci :)

Wersja C-podobna:

bool contains(const char** src, const char* phrase, size_t size) {
	for(size_t i = 0; i < size; ++i) {
		if(strstr(src[i], phrase)) {
			return true;
		}
	}
	return false;
}

http://ideone.com/f9px3D

0

Nie rób char (*argv[]), zostaw tak jak masz w mainie, czyli char *argv[], i przekazuj do funkcji argv i argc bez żadnych znaczków.

0

Dzięki poprawiłem te błędy, zamieniłem strcmp() na strstr() ale dalej nie wiem jak prawidłowo przekazać te argumenty do funkcji szuka_slowo() by zwracała poprawny wynik. @n0name_l spróbuje coś pokombinować też z tym kodem.
Na chwilę obecną wygląda to tak

#include <iostream>
#include <string>
using namespace std;

bool szuka_slowo(char *argv[], int argc, char *slowo)
{
    for (int i = 0; i < argc; i++)
    {
        char *se = strstr(argv[i], slowo);
        if (se ==  NULL)
        {
            cout << "niepoprawna odpowiedz\n";
            return false;
        }
        else 
        {
            cout << "poprawna odpowiedz\n";
            return true;
        }
    }
}

int main(int argc, char* argv[])
{
    const short rozmiar = 50;
    char slowo[rozmiar];
    cout << "podaj szukane slowo:\n";
    cin.getline(slowo, rozmiar);
    cout << slowo << '\n';

    cout << "program wypisze argumenty wywolania\n";
    cout << "//////////////////////\n";
    for (int i = 0; i < argc; i++)
    {
        cout << argv[i] << '\n';
    }
    cout << "//////////////////////\n";

    bool odpowiedz = szuka_slowo(argv, argc, slowo);
    cout << odpowiedz << '\n';
    system("PAUSE");
} 

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