Funkcja zwracająca liczbę wyrazów - użyć string czy char?

0

Macie jakiś pomysł na tego typu funkcję, użyć stringa czy char? Pewnie będę musiał wprowadzić tekst przez cin.getline ???

0

Wszystko zależy od szczegółów zadania.

0
ZADANIE napisał(a)

Napisz program wczytujący tekst z klawiatury i przekazujący go do funkcji, zwracającej liczbę wyrazów.

Już sobie poradziłem problem polegał na tym, że nie wiedziałem, że można napisać warunek w ten sposób:

if( string[i] == ' ')

To cały kod:

#include<iostream>
#include<cstdlib>
#include<string>


using namespace std;

void ilosc_wyrazow(char* string)
{
	int ilosc = 1;

	for (int i = 0; i < 200; i++)
	{
		if (string[i] == ' ')
		{
			ilosc++;
		}
	}

	cout << "Wyrazow w zdaniu jest: " << ilosc;
}

int main()
{
	char string[200];

	cout << "Wpisz zdania: ";
	cin.getline(string, 200);

	ilosc_wyrazow(string);

	cout << "\n";
	system("pause");
}

PS: Wiesz może czy jest jakaś dedykowana funkcja do tego dla stringów?

dodanie znacznika <code class="cpp"> i wstawienie całego kodu do posta - @furious programming

0

@sihox no właśnie jak zrobić takie zabezpieczenie?

2

To beznadziejny kod.
Sprawdzasz więcej znaków niż wczytano, więc możesz policzyć nie istniejące śmieci.
Oprócz tego oprócz spacji mogą być tabulacje - nie uwzględniasz.
No i jak napisał w komentarzu @sihox, wpisanie tekstu: - "a b" spowoduje że policzysz więcej niż do dwóch.

#include <iostream>
#include <cctype>
using namespace std;

unsigned ilosc_wyrazow(char *str)
  {
   unsigned count=0;
   for(unsigned prev=0;*str;++str) if(isspace(*str)) prev=0; else if(!prev) prev=++count;
   return count;
  }

int main()
  {
   char buff[200];
   cout<<"Wpisz zdania: ";
   while(cin.getline(buff,200)) cout<<ilosc_wyrazow(buff)<<endl;
   return 0;
  }
0
_13th_Dragon napisał(a):

To beznadziejny kod.
Sprawdzasz więcej znaków niż wczytano, więc możesz policzyć nie istniejące śmieci.
Oprócz tego oprócz spacji mogą być tabulacje - nie uwzględniasz.
No i jak napisał w komentarzu @sihox, wpisanie tekstu: - "a b" spowoduje że policzysz więcej niż do dwóch.

No to może jakieś rady? Gdybym wiedział jak to napisać raczej bym Ci nie zajmował czasu, a ni nie tracił swojego.

1
int count = 0;
string s;
while (cin >> s) ++count;
cout << count;
0
twonek napisał(a):
int count = 0;
string s;
while (cin >> s) ++count;
cout << count;

Nie wiem co robię w twoim sposobie źle:

#include<iostream>
#include<cstdlib>
#include<string>


using namespace std;

void ilosc_wyrazow(string s)
{
	int count = 0;

	string s;
	while (cin >> s) ++count;

	cout << "Wyrazow w zdaniu jest: " << count;
}

int main()
{
	string s;

	cout << "Wpisz zdania: ";
	ilosc_wyrazow(s);

	cout << "\n";
	system("pause");
}

I dla kilku spacji liczy źle.

usunięcie nadmiaru pustych linii z kodu - @furious programming

0

@_13th_Dragon a ty może napiszesz w końcu coś pomocnego? nie interesuje mnie jak na razie czy nie przekazuje tekstu do funkcji, ale dlaczego to nie działa...

Więc jakim sposobem najlepiej rozwiązać to zadanie?

EDIT

@_13th_Dragon -> sorki nie widziałem:D Zaraz przeanalizuję.

1 użytkowników online, w tym zalogowanych: 0, gości: 1