Witam!
Mam problem z wykonaniem ćwiczenia z książki Stephen'a Prata Szkoła Programowania. Język C++. Ćwiczenie jest związane z rozdziałem Model pamięci i przestrzenie nazw.
Przepisz kod z listingu 9.8, zastępując w nim tablicę znaków obiektem klasy string. Program w nowej wersji nie powinien musieć sprawdzać, czy wprowadzany we wejście ciąg mieści się w buforze i wykrywać pusty wiersz porównaniem obiektu bufora z literałem "".
//Listing 9.8
#include <iostream>
//stałe:
const int ArSize = 10;
//prototyp funkcji:
void strcount(const char * str);
int main()
{
using namespace std;
char input[ArSize];
char next;
cout << "Wprowadz wiersz:\n";
cin.get(input, ArSize);
while (cin)
{
cin.get(next);
while (next != '\n') //wiersz nie zmieścił się w buforze!
cin.get(next);
strcount(input);
cout << "Wprowadz nastepny wiersz (pusty konczy wprowadzanie):\n";
cin.get(input, ArSize);
}
cout << "Koniec\n";
system("PAUSE");
return 0;
}
void strcount(const char * str)
{
using namespace std;
static int total = 0; //statyczna zmienna lokalna
int count = 0; //automatyczna zmienna lokalna
cout << "\"" << str << "\" zawiera ";
while (*str++) //przejdź na koniec ciągu
count++;
total += count;
cout << count << " znakow\n";
cout << "Lacznie " << total << " znakow\n";
}
Nie do końca rozumiem to zadanie, ale udało mi się napisać coś takiego:
#include <iostream>
#include <cstring>
//stałe:
//prototyp funkcji:
void strcount(std::string str);
int main()
{
using namespace std;
string input;
char next;
cout << "Wprowadz wiersz:\n";
cin >> input;
while (cin)
{
cin.get(next);
strcount(input);
cout << "Wprowadz nastepny wiersz (pusty konczy wprowadzanie):\n";
cin >> input;
}
cout << "Koniec\n";
system("PAUSE");
return 0;
}
void strcount(std::string str)
{
using namespace std;
static int total = 0; //statyczna zmienna lokalna
//int count = 0; //automatyczna zmienna lokalna
cout << "\"" << str << "\" zawiera ";
total += strnlen(str);
cout << strnlen(str) << " znakow\n";
cout << "Lacznie " << total << " znakow\n";
}
darek40bc