Podstawy C++ - problem z ćwiczeniem dotyczącym klasy string

0

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";
}
0

Ja bym tak to przerobił :
http://ideone.com/iUzHV
a co do polecenia to chodzi o porównanie

 input == ""

,które tutaj nie ma sensu.

0

Do wczytywania całej linii z wejścia służy funkcja getline(). Aby pobrać wiersz do zmiennej line należy napisać: getline(cin, line).

Dam małego gotowca.

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

void strcount(const string &str);

int main() {
	string line;
	do {
		cout << "Wprowadz wiersz (pusty konczy wprowadzanie):\n";
		getline(cin, line);
		strcount(line);
	} while (line != "");

	cout << "Koniec\n";
	return 0;
}

void strcount(const string &str) {
	static int total = 0;	//statyczna zmienna lokalna
	total += str.length();

	cout << "\"" << str << "\" zawiera " << str.length() << " znakow\n"
	     << "Lacznie " << total << " znakow\n";
}
0

Wydawało mi się, że cstring i string to te same biblioteki. Dlatego mi nie działały funkcje lenght() i getline(). Dzięki za pomoc.

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