• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Liczenie wyrazów

Object Storage Arubacloud
0 głosów
1,018 wizyt
pytanie zadane 25 grudnia 2019 w C i C++ przez Hubertius Bywalec (2,970 p.)

Dzień dobry

Zmagam się obecnie z takim oto zadaniem:

Napisz program, który pobierze od użytkownika łańcuch tekstowy, a następnie policzy ile wyrazów znalazło się w podanym przez użytkownika tekście (wyrazy mogą składać się wyłącznie z liter, oddzielone mogą być dowolnymi znakami, nie będącymi literami). Przyjmij, że długość ciągu wejściowego nie przekroczy 1000 znaków.

Przykładowe wejście:

Podaj tekst:
Przykladowy tekst

Przykładowe wyjście:

2

Rozpisałem kod:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

/* run this program using the console pauser or add your own getch, system("pause") or input loop */

int main(int argc, char *argv[]) 
{
	char tablica1[1001]={0};
	int i=0;
	int licznik=1;
	printf("Podaj tekst :\n");
	fgets(tablica1,1001,stdin);
	while(tablica1[i] != '\0')
	{
	if(tablica1[i] == ' ' &&  (  ( tablica1[i+1]>=65 && tablica1[i+1]<=90 )  ||  ( tablica1[i+1]>=97 && tablica1[i+1]<=122 )   || tablica1[i+1]=='-' || tablica1[i+1] ==39 )  )
	{
	licznik++;
	}
	if(tablica1[i]='.' && ( tablica1[i+1]>=65 && tablica1[i+1]<=90 ) )
	{
		licznik++;
	}
    i++;
	}
	//printf("Elementy tablicy: %d\n",i);
	printf("Ostateczny licznik twoich wyrazow wynosi: %d",licznik);
	return 0;
}

A teraz podam przykładowe testy, na których wychodzą mi złe wyniki:

Dolor magnam dolor sit sed porro eius. Consectetur modi tempora adipisci quisquam velit. Quiquia adipisci est quiquia consectetur est. Dolor sit etincidunt sit velit. Ipsum dolore ut aliquam sit ipsum adipisci tempora. Quaerat neque non adipisci magnam. Dolor labore velit velit quiquia.Est eius amet est quisquam. Quisquam numquam tempora ut voluptatem non etincidunt sit. Labore dolor aliquam tempora amet modi ut. Neque modi magnam labore. Labore labore ipsum ut est adipisci dolor.Voluptatem modi velit tempora. Adipisci quisquam ipsum tempora sit. Consectetur dolore tempora dolor. Etincidunt magnam quisquam neque neque. Eius non porro non non adipisci modi quisquam. Quiquia consectetur quiquia est adipisci.Etincidunt etincidunt dolorem labore est. Porro modiipsumtempora.Sitadipiscietinciduntlabore.Estadipiscimodialiquamneque.Magnamporroaliquamdolor.Quisquamtemporaadipisciutlabore.Quisquamsitvoluptatemdoloremestipsumipsumporro.Quisquameiuslaborequaerataliquam.Porrositsedporroamet.Dolorev

Wartość podana przez program jest błędna; powinno być 119 a jest 108

TV and the Internet are good because they keep stupid people from spending too much time out in public.-Douglas CouplandTechnology is teaching us to be human again.-Simon MainwaringComputing should be taught as a rigorous - but fun - discipline covering topics like programming, database structures, and algorithms. That doesn't have to be boring. - Geoff MulganTechnology... the knack of so arranging the world that we don't have to experience it.-Max Frisch"Computer science education cannot make anybody an expert programmer any more than studying brushes and pigment can make somebody an expert painter." - Eric S. RaymondThe past cannot be changed. The future is yet in your power. - Unknown"The saddest aspect of life right now is that science gathers knowledge faster than society gathers wisdom."  - Isaac AsimovThere was a time in the 1930s when magazinewriterscouldactuallymakeagoodliving.'TheSaturdayEveningPost'and'Collier's'bothhadthreestoriesineachissue.Thesewereusuallyentertaining,andpeoplereallywentforthem.Butthentelevisioncamealong,andnowofcourse,informationtechnology...thenewwayofkillingtime.-TomWolfe

Wartość podana przez program jest błędna; powinno być 144 a jest 135

Podpowiecie mi jakich warunków brakuje w instrukcji warunkowej?  :/

komentarz 25 grudnia 2019 przez mokrowski Mędrzec (155,460 p.)
A nie lepiej klasyfikować znak tym? https://en.cppreference.com/w/c/string/byte/isalpha
komentarz 25 grudnia 2019 przez spamator12 Nałogowiec (28,230 p.)
"oddzielone mogą być dowolnymi znakami, nie będącymi literami)" troche dziwne... wyrazy oddziela sie spacja inaczej np mojmail@mail.com bedzie traktowac jako mojmail i mail.com osobne, rozumiem ze to do nauki, ale jezeli odniesiemy ten przyklad do zadan z zycia codziennego to lepij ograniczyc rozgaleznik do spacji, myslnika i ew podkreslnika.
komentarz 25 grudnia 2019 przez Hubertius Bywalec (2,970 p.)
edycja 25 grudnia 2019 przez Hubertius

Z tą isalphą dobry pomysł, przy ostatecznej wersji pewnie go użyję)

Póki coś mam takiego:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
/* run this program using the console pauser or add your own getch, system("pause") or input loop */

int main(int argc, char *argv[]) 
{
	char tablica1[1001]={0};
	int i=0;
	int licznik=1;
	printf("Podaj tekst :\n");
	fgets(tablica1,1001,stdin);
	while(tablica1[i] != '\0')
	{
	if( (tablica1[i]>=32 && tablica1[i]<=47)  &&  ( ( tablica1[i+1]>=65 && tablica1[i+1]<=90 )  ||  ( tablica1[i+1]>=97 && tablica1[i+1]<=122 )    )  )
	{
	licznik++;
	}

	i++;
	}
	//printf("Elementy tablicy: %d\n",i);
	printf("Ostateczny licznik twoich wyrazow wynosi: %d",licznik);
	return 0;
}

Ale na testach wywala mi coś takiego:

Podaj tekst :⏎
"Never trust a computer you can't throw out a window." - Steve Wozniak, co-founder of Apple Inc.I'm selfish, impatient and a little insecure. I make mistakes, I am out of control and at times hard to handle. But if you can't handle me at my worst, then you sure as hell don't deserve me at my best. - Marilyn MonroeFacts do not cease to exist because they are ignored. - Aldous HuxleyThink left and think right and think low and think high. Oh, the thinks you can think up if only you try! - Dr. SeussNever interrupt your enemy when he is making a mistake. - Napoleon BonaparteYou need to learn how to select your thoughts just the same way you select your clothes every day. This is a power you can cultivate. If you want to control things in your life so bad, work on the mind. That's the only thing you shouldbetryingtocontrol.-ElizabethGilbertYou'vegottadancelikethere'snobodywatching,Lovelikeyou'llneverbehurt,Singlikethere'snobodylistening,Andlivelikeit'sheavenonearth.-WilliamW.Purkey"Technologypresumesthere'sjustonerightwaytodothingsandthereneveris."-RobertM.Pirsig⏎
Ostateczny licznik twoich wyrazow wynosi: 169
Program zakończony; kod błędu=0 (Ok)

Test został przerwany; Wartość podana przez program jest błędna; powinno być 168 a jest 169

Tak blisko, a tak daleko.   :O

EDIT

Kolejna wersja:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
/* run this program using the console pauser or add your own getch, system("pause") or input loop */

int main(int argc, char *argv[]) 
{
	char tablica1[1001]={0};
	int i=0;
	int licznik=1;
	printf("Podaj tekst :\n");
	fgets(tablica1,1001,stdin);
	while(tablica1[i] != '\0')
	{
	if(  (    (tablica1[i]>=32 && tablica1[i]<=47) || tablica1[i]==' ' ) &&  (  ( tablica1[i+1]>=65 && tablica1[i+1]<=90 )  ||  ( tablica1[i+1]>=97 && tablica1[i+1]<=122 ) || tablica1[i+1]==39) && tablica1[i+1]!=' '  )
	{
	licznik++;
	}
	i++;
	}
	//printf("Elementy tablicy: %d\n",i);
	printf("Ostateczny licznik twoich wyrazow wynosi: %d",licznik);
	return 0;
}

Tutaj mam problem z początkowymi spacjami. Jak się go pozbyć?

Problem przestawiony na przykładowym teście:

  The man who does not read has no advantage over the man who cannot read. - Mark Twain

 

 

Zaloguj lub zarejestruj się, aby odpowiedzieć na to pytanie.

Podobne pytania

+1 głos
1 odpowiedź 349 wizyt
pytanie zadane 9 maja 2021 w C i C++ przez nzepik324 Początkujący (260 p.)
0 głosów
2 odpowiedzi 297 wizyt
pytanie zadane 13 listopada 2019 w C i C++ przez Tawka Nowicjusz (200 p.)
0 głosów
1 odpowiedź 124 wizyt
pytanie zadane 20 listopada 2016 w C i C++ przez ka-karola Początkujący (290 p.)

92,570 zapytań

141,422 odpowiedzi

319,643 komentarzy

61,958 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...