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

Funkcja zwracająca liczbę wyrazów - użyć string czy char?
SP
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 120
0

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

_13th_Dragon
  • Rejestracja: dni
  • Ostatnio: dni
0

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

SP
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 120
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:

Kopiuj
if( string[i] == ' ')

To cały kod:

Kopiuj
#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

SP
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 120
0

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

_13th_Dragon
  • Rejestracja: dni
  • Ostatnio: dni
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.

Kopiuj
#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;
  }
SP
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 120
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.

twonek
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 2500
1
Kopiuj
int count = 0;
string s;
while (cin >> s) ++count;
cout << count;
SP
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 120
0
twonek napisał(a):
Kopiuj
int count = 0;
string s;
while (cin >> s) ++count;
cout << count;

Nie wiem co robię w twoim sposobie źle:

Kopiuj
#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

SP
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 120
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ę.

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.