Kod: Zaznacz cały
while (cin.peek() )
{
i++;
if (cin.peek() == EOF || cin.peek() == '\n') break;
}
Kod: Zaznacz cały
while (cin.peek() )
{
i++;
if (cin.peek() == EOF || cin.peek() == '\n') break;
}
Kod: Zaznacz cały
string s;
getline(cin, s);
cout<<s.size()<<endl;
Mógłbyś napisać krótki kod, bo nie bardzo wiem gdzie i jak mam to umieścićspajder pisze:Kod: Zaznacz cały
cin.gcount()
Dzięki, o tym nie wiedziałem. To dlatego pętla nie działała. Pytanie czy jest jakaś podobna funkcja, która w ten sposób była by efektywnaMoraxus pisze:Tak dla wyjaśnienia, to funkcja peek() pobiera znak ze strumienia, ale go nie usuwa.
Oznacza to, że przy każdym przejściu przez pętlę zczytywany jest ten sam znak.
Niestety nie potrafię tego przenieść na C++matshadow pisze:nie lepiej tak?Kod: Zaznacz cały
string s; getline(cin, s); cout<<s.size()<<endl;
To jest w C++krzysiek_ pisze:Niestety nie potrafię tego przenieść na C++matshadow pisze:nie lepiej tak?Kod: Zaznacz cały
string s; getline(cin, s); cout<<s.size()<<endl;
Kod: Zaznacz cały
string s;
getline(cin, s);
cout<<s.size()<<endl;
Kod: Zaznacz cały
string s;
getline(cin, s);
cout<<cin.gcount()<<endl;
lecz niestety po prostu już nie mam pomysłu jak to zrobić. Jakby ktoś mógł zobrazować rozwiązanie króciutkim kodem jak konkretnie policzyć te liczby i wyrazy to byłbym bardzo wdzięczny.1911. Zliczanie liczb i wyrazów
Kod zadania: KC010
Napisz program, który liczy, ile wyrazów i liczb znajduje się w podanej linii.
Wejście
Na wejście programu podana zostanie pewna ilość zestawów danych. Poszczególne zestawy składają sie z liczb całkowitych i wyrazów (wyraz = ciąg liter) rozdzielonych spacjami oraz kończą się znakiem nowej linii.
Wyjście
Na wyjściu ma się pojawić ilość liczb i wyrazów znajdujących się w poszczególnych liniach. Ilość liczb należy oddzielić spacją od ilości wyrazów, a po ilości wyrazów ma się pojawić znak nowej linii.
Przykład
Wejście:
Romek ma 2 koty i 3 psy
2 plus 2 jest rowne 4
Wyjście:
2 5
3 3
Kod: Zaznacz cały
#include <iostream>
#include <cctype>
using namespace std;
int main()
{
ios_base::sync_with_stdio(0);
string s;
while(getline(cin,s))
{
int licz=0,slow=0;
if(isalpha(s[0])) slow++;
else licz++;
for(int i=1;i<s.size()-1;i++)
if(isspace(s[i]))
{
if(isdigit(s[i+1])) licz++;
else slow++;
}
printf("%d %d
",licz,slow);
}
//system("pause");
return 0;
}
Kod: Zaznacz cały
char c;
(...)
if(c=='\n')
//znak jest końcem linii
Może i nie będzie, ale nigdy nic nie wiadomo, a wiem, że z tym też miałem problemMoraxus pisze:Z końcem linii nie będzie problemu, wystarczy dany znak porównać z '\n' np:Tylko nie wiem do czego Ci to potrzebne, skoro funkcja getline zastosowana w programie matshadowa pobiera pojedyńcze linie.Kod: Zaznacz cały
char c; (...) if(c=='\n') //znak jest końcem linii