Informatică, întrebare adresată de mariamagdalena2269, 8 ani în urmă

Fiind dat un șir de caractere care se află pe prima linie, să se afle lungimea medie a cuvintelor.
Date de intrare
De pe prima linie se va citi şirul.
Date de ieşire
Pe ecran se va afişa lungimea medie a cuvintelor din text. Numărul va fi afisat cu 2 zecimale.
Restricții și precizări

• Şirul va conține maxim 100 de caractere.
• Şirul va conţine litere mari şi mici precum şi semne de punctuație
• Un cuvânt este definit ca una sau mai multe litere aflate pe poziții consecutive
• În cazul în care şirul nu conţine cuvinte, lungimea medie este 0
Exemplu
Date de intrare
ana are mere
Date de iesire. 3.33

Răspunsuri la întrebare

Răspuns de Sergetec
0

Salut!

Ai rezolvarea in C++ mai jos

#include <iostream>

#include <cstring>

#include <iomanip>

using namespace std;

int main()

{

 char s[101], m[101][20], sep[] = " ";

 int ind = 0, suma = 0;

 cin.getline(s, 101);

 char *p = strtok(s, sep);

 while (p)

 {

   strcpy(m[++ind], p);

   p = strtok(NULL, sep);

 }

 for (int i = 1; i <= ind; ++i)

 {

   suma += strlen(m[i]);

 }

 cout << fixed << setprecision(2) << (double)suma/ind;

 return 0;

}

Explicatie:

  • Dupa ce am citit sirul de caractere, ne creeam o matrice in care retinem doar cuvintele din sirul respectiv. Putem obtine asta ajutandu-ne de functia strtok.
  • Functia strtok extrage dintr-un sir de caractere cate un subsir (cuvant) delimitat de caracterele din sirul sep (in cazul nostru sep este un spatiu).
  • Biblioteca iomanip ne ajuta sa setam precizia pentru care dorim rezultatul.

mariamagdalena2269: Multumesc de raspuns! Insa nu e ok rezolvarea, la verificare primesc doar 20 de puncte din 100. Cand nu am Nici un caracter in sir Imi afiseaza nan nu 0 Cum ar trebui .
Sergetec: Problema cu nan e simpla, adauga un if statement, daca sirul e nul atunci afiseaza 0 si return 0;
mariamagdalena2269: Da, modificasem intre timp asta Cu if, dar tot nu e ok. Multumesc oricum !
Sergetec: Hmm acum observ ceva interesant la cerinta, spune ca sirul va contine si semne de punctuatie
Sergetec: inlocuieste la sep[] cu asta sep[] = " ,.!?" (este foarte important sa fie si un spatiu acolo)
mariamagdalena2269: Ok, verific și revin! Mulțumesc frumos de ajutor!
mariamagdalena2269: Tot nu e bine, un test e gresit nu Imi dau seama care. Am inlocuit, am testat pe mai multe cazuri, Imi functioneaza dar totusi un test e gresit .
Alte întrebări interesante