logo elektroda
logo elektroda
X
logo elektroda
REKLAMA
REKLAMA
Adblock/uBlockOrigin/AdGuard mogą powodować znikanie niektórych postów z powodu nowej reguły.

Jak zliczyć wystąpienia liter i znaleźć pozycję słowa w C?

dariusz1912 03 Gru 2005 00:16 3130 9
REKLAMA
  • #1 2048541
    dariusz1912
    Poziom 10  
    Posty: 46
    Pomógł: 1
    to pomoże zrobić program w 'C'.Napisz program który wstawia do tablicy jednowymiarowej zmaki podane przez

    urzytkownika, a następnie wyznacza liczbę wystąpień poszczególnych liter w podanym napisie. Np:Ala ma psa.
    a: 4
    l: 1
    m: 1
    p: 1
    s: 1
    Powiecccie chociarz z jakiego warunku skorzystać. Wiem że trzeba urzyć funkcji wczytującej napis gets() do tablicy

    znaków ale nie mam pomysłu na to by program wypisywał te znaki. Bede bardzo wdzięczny za pomoc. Bardzo.




    Mam jeszcze pytanie dotyczące ,zabardzo niewiem jak to sie nazywa ale chyba tzw. wzorca np:" Ala ma cos tam " i

    np: chcemy by program znalazł i wskazał na której pozycji w tekście jest wyraz " ma " np by wypisał że jest na

    drugiej pozycji. Może ktoś by wiedział.
  • REKLAMA
  • #2 2048686
    dziqus
    Poziom 18  
    Posty: 208
    Pomógł: 17
    Ocena: 15
    dariusz1912 napisał:
    Napisz program który wstawia do tablicy jednowymiarowej zmaki podane przez urzytkownika
    :arrow:
    char przykladowa_tablica[30];
    gets(przykladowa_tablica);
    wczytujesz tekst i juz masz znaki w tablicy jednowymiarowej
    Cytat:
    następnie wyznacza liczbę wystąpień poszczególnych liter w podanym napisie.
    tu mam troche skomplikowany pomysl:
    char tablica[40];
    char znaki[26];
    
    void main()
    {
        gets(tablica);
        for (int x=0; x<strlen(tablica); x++) znaki[toupper(tablica[x])-65]++;
        for (x=0; x<26; x++) if (znaki[x]!=0) printf("Znak %c wystapil %x raz(y)\n", x+65, znaki[x]);
    }
    poczytaj w pomocy co robi kazda z funkcji i jakie biblioteki trzeba dolaczyc, przeanalizuj to a jakbys czegos nie rozumial to pytaj. generalnie chodzi mi o stworzenie dodatkowej tablicy w ktorej przechowujemy liczbe wystapien poszczegolnych znakow, nastepnie wyswietlamy inforamacje o znaku tylko w przypadku gdy ten znak wystapil co najmniej raz. ten przyklad powyzej oblicza liczbe wystapien liter A-Z bez rozrozniania duze/male, do obliczania indeksow tablicy "znaki" wykorzystuje kody ascii znakow ('A" ma kod 65, liczba wystapien litery 'A' jest w komorce o indeksie 0. 'B' w komorce 1, 'C' w komorce 2 itd)

    Cytat:
    Mam jeszcze pytanie dotyczące ,zabardzo niewiem jak to sie nazywa ale chyba tzw. wzorca np:" Ala ma cos tam " i np: chcemy by program znalazł i wskazał na której pozycji w tekście jest wyraz " ma " np by wypisał że jest na drugiej pozycji. Może ktoś by wiedział.
    tu bym skorzystal z "strstr()". w tym przykladzie "ma" nie jest na drugiej pozycji! jest drugimy wyrazem w tekscie.

    na pewno cos zamotalem bo juz "troche" pozno ;) :lol:
  • #3 2048739
    dariusz1912
    Poziom 10  
    Posty: 46
    Pomógł: 1
    No troche to zamotałeś. Choroba ja takich funkcji niemiałem jak te przytoczone przez ciebie. Kumpel mi muwił że on tam kombinował ze znakami z tablicy ascii może to jest dobre.Że mu jakoś to zlicza.Może ktoś by z tego wątku skorzystałi pomógł.

    Dodano po 1 [minuty]:

    Mam jeszcze pytanie dotyczące ,zabardzo niewiem jak to sie nazywa ale chyba tzw. wzorca np:" Ala ma cos tam " i np: chcemy by program znalazł i wskazał na której pozycji w tekście jest wyraz " ma " np by wypisał że jest na drugiej pozycji. Może ktoś by wiedział.
  • REKLAMA
  • #4 2048968
    Sam Sung
    Poziom 33  
    Posty: 2010
    Pomógł: 227
    Ocena: 582
    Program dziqus'a wysypie się po wpisaniu 40 lub więcej znaków...

    Moja wersja pierwszego programu:
    #include <stdio.h>
    #include <stdlib.h>
    
    int main(void)
    {
      unsigned long tab[0x100];
      int c, i;
      memset(tab, 0, sizeof(tab));
      while ((c = getchar()) != EOF)
        tab[c]++;
      for (i = 0; i < 0x100; i++)
        if (tab[i])
          printf("%c: %lu\n", i, tab[i]);
      return 0;
    }

    Ten program powinien działać dla tekstów do 4 GB zajmując przy tym symboliczną ilość pamięci.

    A co do drugiego pytania, to przytaczana już funkcja strstr znajduje pozycję wzorca w tekście.
  • #5 2049590
    dziqus
    Poziom 18  
    Posty: 208
    Pomógł: 17
    Ocena: 15
    ano wysypie sie, ale biorac pod uwage to ze
    dariusz1912 napisał:
    ja takich funkcji niemiałem jak te przytoczone przez ciebie
    domniemuje ze Twojego programu kolega ani tyle nie skuma...


    pomimo tego ze oczywiscie jest lepszy ;)
  • REKLAMA
  • #6 2050862
    dariusz1912
    Poziom 10  
    Posty: 46
    Pomógł: 1
    Dobra wiem już jak zrobić . Ale mam problemy z bibliotekami do dołaczenia do funkcji "toupper" i "strlen".
    Może ktoś by coś napisał o funkcji "strstr()" bo 1 raz takie coś widze i niewiem jak stosować.Choroba ja ten

    programik to w DEV-C++ robie to tam zabardzo w helpie niema opisanego.
  • REKLAMA
  • #7 2050931
    dziqus
    Poziom 18  
    Posty: 208
    Pomógł: 17
    Ocena: 15
    zainstaluj sobie borland c++ 3.1, bardzo dobry kompilator jak na poczatek i mozna duzo ciekawych rzeczy w pomocy znalezc ;)
  • #8 2051021
    dariusz1912
    Poziom 10  
    Posty: 46
    Pomógł: 1
    Potrzebuje pomocy do programu ,ma błąd :kompilator wypisuje : invalid conversion from 'char' to 'int' i jeszcze incompatible types in assignment of 'int' to 'char' I niewiem co jest.
    #include <stdio.h>
    #include <conio.h>
    #include<ctype.h>

    unsigned char licznik(char *tablica, char n);
    int main()
    {
    char tablica[81];
    int i, n, ile;
    printf("Napisz zdanie zakonczone kropka (max 80 znakow)i nacisnij ENTER: ");
    gets(tablica);

    for( i=0; ((tablica) !='\0'); i++ )
    tablica = toupper(tablica);
    for( i=0; i<255; i++ )
    {
    ile = licznik( tablica, i );
    if( ile > 0 )

    printf("Liczba wystapien poszczegolnych znakow wynosi:",(char)i,ile);

    getch ();
    return 0;
    }};
  • #9 2051083
    dziqus
    Poziom 18  
    Posty: 208
    Pomógł: 17
    Ocena: 15
    dariusz1912 napisał:
    Potrzebuje pomocy do programu ,ma błąd :kompilator wypisuje : invalid conversion from 'char' to 'int' i jeszcze incompatible types in assignment of 'int' to 'char' I niewiem co jest.
    #include <stdio.h>
    #include <conio.h>
    #include<ctype.h>

    unsigned char licznik(char *tablica, char n); //tu chyba brakuje ciala funkcji :roll:
    int main()
    {
    char tablica[81];
    int i, n, ile;
    printf("Napisz zdanie zakonczone kropka (max 80 znakow)i nacisnij ENTER: ");
    gets(tablica);

    for( i=0; ((tablica) !='\0'); i++ ) //
    tablica = toupper(tablica); //tutaj brakuje indeksow :roll:
    for( i=0; i<255; i++ )
    {
    ile = licznik( tablica, i ); //tutaj do int'a przypisujesz wartosc typu char
    if( ile > 0 )

    printf("Liczba wystapien poszczegolnych znakow wynosi:",(char)i,ile); //tu wyswietla sie tylko napisy "liczba .... wynosi:" bo nie wpisales %c i %i ktore sa potrzebne do wyswietlenia znaku i liczby

    getch ();
    return 0; //to ma byc miedzy tymi klamrami ponizej
    }};



    poczytaj jakis kurs od podstaw bo bez tego ani rusz :roll:
  • #10 2051135
    Sam Sung
    Poziom 33  
    Posty: 2010
    Pomógł: 227
    Ocena: 582
    dariusz1912 napisał:
    mam problemy z bibliotekami do dołaczenia do funkcji "toupper" i "strlen".

    toupper - <ctype.h>
    strlen - <string.h>
    dariusz1912 napisał:
    Może ktoś by coś napisał o funkcji "strstr()" bo 1 raz takie coś widze i niewiem jak stosować.

    man strstr napisał:
    STRSTR(3) Linux Programmer's Manual STRSTR(3)



    NAZWA
    strstr - szukanie podciągu

    SKŁADNIA
    #include <string.h>

    char *strstr(const char *haystack, const char *needle);

    OPIS
    Funkcja strstr() znajduje pierwsze wystąpienie podłańcucha needle w
    łańcuchu haystack. Kończące znaki `\0' nie są porównywane.

    WARTOŚĆ ZWRACANA
    Funkcja strstr() zwraca wskaźnik do początku podłańcucha lub wartość
    NULL jeśli podłańcuch ten nie zostanie znaleziony.

    USTERKI
    Wczesne wersje biblioteki libc Linuksa (np. 4.5.26) nie pozwalały na
    przekazywanie pustych argumentów. Wersje późniejsze (np. 4.6.27)
    działają prawidłowo i zwracają haystack gdy needle jest puste.

    ZGODNE Z
    ISO 9899

    ZOBACZ TAKŻE
    index(3), memchr(3), rindex(3), strchr(3), strpbrk(3), strsep(3), str-
    spn(3), strtok(3)



    GNU 1993-04-12 STRSTR(3)

Podsumowanie tematu

✨ Dyskusja dotyczy napisania programu w języku C, który wczytuje tekst do tablicy jednowymiarowej, zlicza wystąpienia poszczególnych liter oraz znajduje pozycję wybranego słowa w tekście. Zaproponowano użycie funkcji gets() do wczytania napisu oraz tablicy do przechowywania liczby wystąpień znaków. Przykładowy kod wykorzystuje funkcje toupper() i strlen() z bibliotek ctype.h i string.h do przetwarzania liter bez rozróżniania wielkości. Wskazano, że do znajdowania pozycji wzorca w tekście można użyć funkcji strstr(). Podkreślono konieczność dołączenia odpowiednich bibliotek oraz zwrócono uwagę na błędy typów danych i konwersji w kodzie. Zaproponowano także alternatywne kompilatory, takie jak Borland C++ 3.1, dla lepszej pomocy i wsparcia. Omówiono ograniczenia funkcji gets() oraz sposoby poprawnego iterowania po znakach tablicy znaków.
Wygenerowane przez model językowy.
REKLAMA