[C++] Operacje na słowach

xdominika
Użytkownik
Użytkownik
Posty: 81
Rejestracja: 14 lis 2019, o 22:59
Płeć: Kobieta
wiek: 19
Podziękował: 23 razy

[C++] Operacje na słowach

Post autor: xdominika »

1. Napisać funkcję
int ileWyrazow(char* s)
która zwraca liczbę wyrazów w napisie s.

Kod: Zaznacz cały

int ileWyrazow(char* s)
{
    int wyrazy=1
  for (int i=0; s[i]; i++)
    if (s[i]==' ') wyrazy++;
  return wyrazy;
}
Program ten uzależnia liczbę wyrazów od liczby spacji, jednak jeżeli spacje pojawią się przed pierwszym wyrazem albo po ostatnim, albo po prostu po kolei będzie ich więcej niż jedna, to program nie działa prawidłowo, w sumie się tego spodziewałam, jednak nie mam innego pomysłu na to zadanie.

2. Napisać funkcję
int znajdz(char* s, char* t)
która zwraca indeks pierwszego wystąpienia napisu t w s (lub -1 jeśli nie ma).

Kod: Zaznacz cały

int dlugosc(char* s) {
    int i;
for(i=0; s[i]; i++);
return i;
}

int znajdz(char* s, char* t)
{
    for (int i=0; i<dlugosc(s); i++)
    {
        if (s[i]==*t) return i;
        else return -1;
    }
}
Dlaczego ta funkcja nie działa? Tutaj nie widzę żadnego powodu.

3. Napisać funkcję
int liczba(char* s)
która zwraca wartość liczbową napisu s.

Kod: Zaznacz cały

int liczba(char* s)
{
    int n=*s-'0';
    return n;
}
Ta funkcja działa, gdyby było char s, natomiast z char* już nie.

Będę bardzo wdzięczna za pomoc, jeżeli ktoś będzie w stanie mi pomóc, dopiero zaczynam przygodę z programowaniem i często nie rozumiem najbardziej podstawowych rzeczy. :(
Ostatnio zmieniony 1 gru 2020, o 09:43 przez Afish, łącznie zmieniany 1 raz.
Powód: Poprawa wiadomości.
Ponury123
Użytkownik
Użytkownik
Posty: 128
Rejestracja: 5 lip 2015, o 14:48
Płeć: Mężczyzna
Lokalizacja: nie wiem
Podziękował: 11 razy
Pomógł: 24 razy

Re: [C++] Operacje na słowach

Post autor: Ponury123 »

1. Trzeba najpierw założyć co jest separatorem kolejnych wyrazów(spacja, tab, przecinek, etc.), załóżmy, że jest to spacja tylko i wyłącznie, przypisanie wartości 1 do ilości wyrazów już jest błędem, bo co jeśli podany ciąg znaków to tylko spacje. Można by zrobić, że zmienna wyrazy jest inkrementowana jeśli obecny znak to spacja i kolejny znak istnieje i kolejny znak to nie spacja, plus trzeba sprawdzić jaki jest pierwszy znak, żeby nie pominąć pierwszego słowa.

Kod: Zaznacz cały

int ileWyrazow(char *s) {
    int wyrazy = 0;

    if (s[0] != ' ') {
        wyrazy++;
    }

    for (int i = 0; s[i]; i++) {
        if (s[i] == ' ' && s[i + 1] && s[i + 1] != ' ') {
            wyrazy++;
        }
    }
    return wyrazy;
}
Dodano po 16 minutach 45 sekundach:
2. Można by tak:

Kod: Zaznacz cały

int znajdz(char *s, char *t) {
    if (strstr(s, t)) {
        return 1;
    } else {
        return -1;
    }
}

Kod: Zaznacz cały

https://devdocs.io/cpp/string/byte/strstr


Dodano po 2 minutach 31 sekundach:
A jeszcze żeby wyjaśnić czemu 2 nie działało, to

Kod: Zaznacz cały

if (s[i]==*t) return i;
        else return -1;
sprawdzało czy dany znak z tablicy s jest taki sam jak znak znajdujący się pod indeksem zero tablicy t ->

Kod: Zaznacz cały


if (s[i]==t[0]) return i;
        else return -1;
Dodano po 8 minutach 13 sekundach:
Dodam jeszcze, że C++ to nie moja broszka więc może ktoś inny uzupełni moją wypowiedź, plus nie rozumiem polecenia w zadaniu 3, wartość liczbową znaku to można podać w jakimś tam kodowaniu np. w ASCII, ale wartość liczbową napisu? Czyli, że wartość kolejnych znaków? Jeśli tak to:

Kod: Zaznacz cały

void liczba(char *s) {
    for (char c = *s; c; c = *++s) {
        std::cout << int(c) << ' ';
    }
}
Dodano po 1 dniu 14 godzinach 45 minutach 24 sekundach:
Czemu ludzie nie mówią dziękuje, mi się robi smutno jak poświęcam swój czas, żeby komuś pomóc, a to odbija się głuchym echem :c
xdominika
Użytkownik
Użytkownik
Posty: 81
Rejestracja: 14 lis 2019, o 22:59
Płeć: Kobieta
wiek: 19
Podziękował: 23 razy

Re: [C++] Operacje na słowach

Post autor: xdominika »

Ponury123 pisze: 3 gru 2020, o 11:02Czemu ludzie nie mówią dziękuje, mi się robi smutno jak poświęcam swój czas, żeby komuś pomóc, a to odbija się głuchym echem :c
Właśnie bardzo dziękuję za pomoc! I przepraszam, że dopiero teraz, po prostu miałam dużo spraw na głowie i dopiero do tego usiadłam nad tymi zadaniami
Ostatnio zmieniony 6 gru 2020, o 14:42 przez Jan Kraszewski, łącznie zmieniany 1 raz.
Powód: Po co cytujesz cały post, który masz powyżej?
ODPOWIEDZ