Macie jakiś pomysł na tego typu funkcję, użyć stringa czy char? Pewnie będę musiał wprowadzić tekst przez cin.getline ???
Wszystko zależy od szczegółów zadania.
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
@sihox no właśnie jak zrobić takie zabezpieczenie?
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;
}
_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.
int count = 0;
string s;
while (cin >> s) ++count;
cout << count;
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
@_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ę.