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

[C] Porównywanie łańcuchów znaków

Ostatnio zmodyfikowano 2016-10-21 19:39
Autor Wiadomość
newbie01
Temat założony przez niniejszego użytkownika
[C] Porównywanie łańcuchów znaków
» 2016-10-21 15:23:45
Siema, dostałem takie zadanie: Napisz program, który pyta o imię użytkownika. Następnie zlicza ile liter ’a’ (nie
rozróżniamy dużych i małych liter) występuje w tym imieniu.
jak narazie doszedłem do czegoś takiego, i nie mam pojęcia co mam z tym dalej zrobić :/


C/C++
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

main()
{
    int i = 0, x = 0;
    char imie[ 1024 ];
    char a[ 3 ] = { 'A', 'a' };
    printf( "Podaj imie: " );
    fgets( imie, 1024, stdin );
    x = strcmp( imie, a, 1024 );
    for( i = 0; i < 1024; i++ )
    {
        if( strcmp( imie, a ) == 0 )
       
    }
   
   
         return( 0 );
   
}
P-152725
carlosmay
» 2016-10-21 15:46:09
Przepuść imię literkę po literce w pętli, i szukaj wystąpienia literki 'a'.
Gdy znajdziesz powiększ licznik.
np. coś takiego:
C/C++
for( int i = 0; imie[ i ] != '\0'; ++i ) {
    if( tolower( imie[ i ] ) == a ) { // tolower() -> <ctype.h>
        licznik += 1;
    }
}

printf( "literka %c pojawia sie %d razy w imieniu %s", a, licznik, imie );
P-152726
newbie01
Temat założony przez niniejszego użytkownika
» 2016-10-21 16:31:39
Dzięki za tak szybką odpowiedź.
Niestety program sie crashuje po zastosowaniu instrukcji na wzór jaki podałeś.
Z tego co wiem nie można porównywać łańcuchów znaków poprzez operator == tylko poprzez funkcję strcmp, jednak nie mam pojęcia jaki warunek napisać do if'a
to co mam aktualnie:
C/C++
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <ctype.h>
main()
{
    int i = 0, licznik = 0;
    char imie[ 1024 ];
    char a[] = { 'a', 'A' };
    printf( "Podaj imie: " );
    fgets( imie, 1024, stdin );
    for( i = 0; i < 1024; ++i )
    {
        if( strcmp( imie, a ) == 0 )
        {
            licznik += 1;
           
        }
    }
    printf( "liczba a to %d\n", & licznik );
   
    return( 0 );
}
z góry dzięki za wszelką dalszą pomoc
P-152727
michal11
» 2016-10-21 17:04:20
imie[ i ]
 to nie jest łańcuch znakowy tylko zwykły char które można porównywać operatorem ==. carlosmay podał ci praktycznie gotowy kod, jeżeli masz jakieś błędy to je tu wklej. W tym zadaniu nie musisz używać strcmp.

licznik += 1;
 ciekawe rozwiązanie.
P-152728
carlosmay
» 2016-10-21 18:06:11
ciekawe rozwiązanie.
Nie mogę zapamiętać, czy czyste C ma inkrementację,
a w kroku nagłówku
++i
 poszedł nawykiem.


C/C++
for( i = 0; i < 1024; ++i ) // jak imie ma 10 znaków, sprawdzanie pozostałych 1014 nie ma sensu
{
    if( strcmp( imie, a ) == 0 )
    {
        licznik += 1;
       
    }
}

Funkcja
strcmp
 porównuje łańcuchy, a nie sprawdza wystąpienie znaku w łańcuchu.

printf( "liczba a to %d\n", & licznik );
Tutaj wypisujesz adres zmiennej 'licznik' zamiast jej wartości.
&
 jest niepotrzebne.
P-152733
newbie01
Temat założony przez niniejszego użytkownika
» 2016-10-21 18:43:39
przy kodzie:
C/C++
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <ctype.h>
main()
{
    int i = 0;
    int licznik = 0;
    char imie[ 1024 ];
    printf( "Podaj imie: " );
    fgets( imie, 1024, stdin );
    for( int i = 0; imie[ 1024 ] != '\0'; i++ )
    {
        if( tolower( imie[ 1024 ] ) == a ) //linia 14
        {
            licznik += 1;
        }
    }
   
   
   
    printf( "liczba a to %d\n", & licznik );
   
    return( 0 );
}
wyskakuje błąd że w linii 14 "identifier "a" is undefined"
P-152736
carlosmay
» 2016-10-21 18:47:15
wyskakuje błąd że w linii 14 "identifier "a" is undefined"
Ponieważ nie masz zadeklarowanej zmiennej
a
.

Wstaw gdzieś wcześniej
char a = 'a';
 lub porównaj do znaku na sztywno, czyli
C/C++
if( tolower( imie[ 1024 ] ) == 'a' ) //linia 14

W twoim pierwszym kodzie była tablica o nazwie
a
.
Zamieniłem ją na pojedynczy znak o tej samej nazwie (nie wspomniałem o tym, przepraszam).

edit:
poprawna wersja to
C/C++
if( tolower( imie[ i ] ) == a ) // linia 14
P-152737
newbie01
Temat założony przez niniejszego użytkownika
» 2016-10-21 19:03:21
https://i.imgsafe.org​/a49b94a34a.jpg
zdjęcie pokazujące na jakim etapie program się "zacina"
środowisko nie pokazuje już żadnych błędów
aktualny kod:
C/C++
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <ctype.h>
main()
{
    int i = 0;
    int licznik = 0;
    char imie[ 1024 ];
    char a = 'a';
    printf( "Podaj imie: " );
    fgets( imie, 1024, stdin );
    for( int i = 0; imie[ 1024 ] != '\0'; i++ )
    {
        if( tolower( imie[ 1024 ] ) == a )
        {
            licznik += 1;
            printf( "liczba a to %d\n", & licznik );
        }
    }
   
   
   
   
   
    return( 0 );
}
wiem że dla was to jest obvious, ale proszę zrozumcie że jestem po 2 zajęciach z programowania(nigdy wczesniej nie miałem z tym styczności) i jakoś do mnie to nie dociera.
P-152738
« 1 » 2
  Strona 1 z 2 Następna strona