out << '\n' << tmp; // 4.1
i = tmp.length();
tmp.clear();
} else if (isspace(cur) && // ΠΡΠΎ ΠΊΠΎΠ½Π΅Ρ
!isspace(last)) { // ΡΠ»ΠΎΠ²Π°
out << tmp;
tmp.clear();
}
tmp += cur;
last = cur;
}
}
int main(int argc, char** argv) {
if (argc < 3)
return(EXIT_FAILURE);
int w = 72;
ifstream in(argv[1]);
ofstream out(argv[2]);
if (!in || !out)
return(EXIT_FAILURE);
if (argc == 4) w = atoi(argv[3]);
textWrap(in, out, w);
out.close();
if (out)
return(EXIT_SUCCESS);
else
return(EXIT_FAILURE);
}
ΠΠ±ΡΡΠΆΠ΄Π΅Π½ΠΈΠ΅textWrap ΡΠΈΡΠ°Π΅Ρ ΠΏΠΎ ΠΎΠ΄Π½ΠΎΠΌΡ ΡΠΈΠΌΠ²ΠΎΠ»Ρ ΠΈΠ· Π²Ρ ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΏΠΎΡΠΎΠΊΠ°. ΠΠ°ΠΆΠ΄ΡΠΉ ΡΠΈΠΌΠ²ΠΎΠ» Π΄ΠΎΠ±Π°Π²Π»ΡΠ΅ΡΡΡ ΠΊ Π²ΡΠ΅ΠΌΠ΅Π½Π½ΠΎΠΉ ΡΡΡΠΎΠΊΠ΅ tmp Π΄ΠΎ ΡΠ΅Ρ ΠΏΠΎΡ, ΠΏΠΎΠΊΠ° Π½Π΅ Π±ΡΠ΄Π΅Ρ Π΄ΠΎΡΡΠΈΠ³Π½ΡΡ ΠΊΠΎΠ½Π΅Ρ ΡΠ»ΠΎΠ² ΠΈΠ»ΠΈ ΠΌΠ°ΠΊΡΠΈΠΌΠ°Π»ΡΠ½Π°Ρ Π΄Π»ΠΈΠ½Π° ΡΡΡΠΎΠΊΠΈ. ΠΡΠ»ΠΈ Π΄ΠΎΡΡΠΈΠ³Π½ΡΡ ΠΊΠΎΠ½Π΅Ρ ΡΠ»ΠΎΠ²Π°, Π° ΠΌΠ°ΠΊΡΠΈΠΌΠ°Π»ΡΠ½Π°Ρ Π΄Π»ΠΈΠ½Π° ΡΡΡΠΎΠΊΠΈ Π΅ΡΠ΅ Π½Π΅ Π΄ΠΎΡΡΠΈΠ³Π½ΡΡΠ°, ΡΠΎ Π²ΡΠ΅ΠΌΠ΅Π½Π½Π°Ρ ΡΡΡΠΎΠΊΠ° Π·Π°ΠΏΠΈΡΡΠ²Π°Π΅ΡΡΡ Π² Π²ΡΡ ΠΎΠ΄Π½ΠΎΠΉ ΠΏΠΎΡΠΎΠΊ. Π ΠΏΡΠΎΡΠΈΠ²Π½ΠΎΠΌ ΡΠ»ΡΡΠ°Π΅, Π΅ΡΠ»ΠΈ ΠΌΠ°ΠΊΡΠΈΠΌΠ°Π»ΡΠ½Π°Ρ Π΄Π»ΠΈΠ½Π° ΡΡΡΠΎΠΊΠΈ Π±ΡΠ»Π° ΠΏΡΠ΅Π²ΡΡΠ΅Π½Π°, Π² Π²ΡΡ ΠΎΠ΄Π½ΠΎΠΉ ΠΏΠΎΡΠΎΠΊ Π·Π°ΠΏΠΈΡΡΠ²Π°Π΅ΡΡΡ Π½ΠΎΠ²Π°Ρ ΡΡΡΠΎΠΊΠ°, ΠΏΡΠΎΠ±Π΅Π» Π² Π½Π°ΡΠ°Π»Π΅ Π²ΡΠ΅ΠΌΠ΅Π½Π½ΠΎΠΉ ΡΡΡΠΎΠΊΠΈ ΡΠ΄Π°Π»ΡΠ΅ΡΡΡ, ΠΈ ΡΡΡΠΎΠΊΠ° Π·Π°ΠΏΠΈΡΡΠ²Π°Π΅ΡΡΡ Π² Π²ΡΡ ΠΎΠ΄Π½ΠΎΠΉ ΠΏΠΎΡΠΎΠΊ. Π’Π°ΠΊΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ, textWrap Π·Π°ΠΏΠΈΡΡΠ²Π°Π΅Ρ Π² Π²ΡΡ ΠΎΠ΄Π½ΠΎΠΉ ΠΏΠΎΡΠΎΠΊ ΡΡΠΎΠ»ΡΠΊΠΎ, ΡΠΊΠΎΠ»ΡΠΊΠΎ ΠΌΠΎΠΆΠ½ΠΎ, Π½ΠΎ Π½Π΅ ΠΏΡΠ΅Π²ΡΡΠ°Ρ ΠΌΠ°ΠΊΡΠΈΠΌΠ°Π»ΡΠ½ΠΎΠΉ Π΄Π»ΠΈΠ½Ρ ΡΡΡΠΎΠΊΠΈ. ΠΠΌΠ΅ΡΡΠΎ ΡΠ°Π·Π΄Π΅Π»Π΅Π½ΠΈΡ ΡΠ»ΠΎΠ² ΠΎΠ½Π° ΠΏΠ΅ΡΠ΅Π½ΠΎΡΠΈΡ Π²ΡΠ΅ ΡΠ»ΠΎΠ²ΠΎ Π½Π° Π½ΠΎΠ²ΡΡ ΡΡΡΠΎΠΊΡ.
ΠΡΠΈΠΌΠ΅Ρ 4.25 ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅Ρ ΠΏΠΎΡΠΎΠΊΠΈ ΠΏΠΎΡΡΠΈ ΡΠ°ΠΊ ΠΆΠ΅, ΠΊΠ°ΠΊ ΠΈ ΡΠ΅ΡΠ΅ΠΏΡ 4.15. ΠΠ° Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»ΡΠ½ΠΎΠΉ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΠ΅ΠΉ ΠΎ ΠΏΠΎΡΠΎΠΊΠ°Ρ ΠΈ ΠΈΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠΈ ΠΎΠ±ΡΠ°ΡΠΈΡΠ΅ΡΡ ΠΊ ΡΡΠΎΠΌΡ ΡΠ΅ΡΠ΅ΠΏΡΡ.
Π‘ΠΌΠΎΡΡΠΈ ΡΠ°ΠΊΠΆΠ΅Π Π΅ΡΠ΅ΠΏΡ 4.15.
4.17. ΠΠΎΠ΄ΡΡΠ΅Ρ ΡΠΈΡΠ»Π° ΡΠΈΠΌΠ²ΠΎΠ»ΠΎΠ², ΡΠ»ΠΎΠ² ΠΈ ΡΡΡΠΎΠΊ Π² ΡΠ΅ΠΊΡΡΠΎΠ²ΠΎΠΌ ΡΠ°ΠΉΠ»Π΅
Π’ΡΠ΅Π±ΡΠ΅ΡΡΡ ΠΏΠΎΠ΄ΡΡΠΈΡΠ°ΡΡ ΡΠΈΡΠ»ΠΎ ΡΠΈΠΌΠ²ΠΎΠ»ΠΎΠ², ΡΠ»ΠΎΠ² ΠΈ ΡΡΡΠΎΠΊ β ΠΈΠ»ΠΈ ΠΊΠ°ΠΊΠΈΡ -Π»ΠΈΠ±ΠΎ Π΄ΡΡΠ³ΠΈΡ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠΎΠ² ΡΠ΅ΠΊΡΡΠ° β Π² ΡΠ΅ΠΊΡΡΠΎΠ²ΠΎΠΌ ΡΠ°ΠΉΠ»Π΅.
Π Π΅ΡΠ΅Π½ΠΈΠ΅ΠΠ»Ρ ΡΡΠ΅Π½ΠΈΡ ΡΠΈΠΌΠ²ΠΎΠ»ΠΎΠ² ΠΏΠΎ ΠΎΠ΄Π½ΠΎΠΌΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠΉΡΠ΅ Π²Ρ ΠΎΠ΄Π½ΠΎΠΉ ΠΏΠΎΡΠΎΠΊ ΠΈ ΠΏΠΎ ΠΌΠ΅ΡΠ΅ ΡΡΠ΅Π½ΠΈΡ ΡΠΈΠΌΠ²ΠΎΠ»ΠΎΠ², ΡΠ»ΠΎΠ² ΠΈ ΡΡΡΠΎΠΊ ΡΠ²Π΅Π»ΠΈΡΠΈΠ²Π°ΠΉΡΠ΅ ΡΡΠ΅ΡΡΠΈΠΊΠΈ. ΠΡΠΈΠΌΠ΅Ρ 4.26 ΡΠΎΠ΄Π΅ΡΠΆΠΈΡ ΡΡΠ½ΠΊΡΠΈΡ countStuff, ΠΊΠΎΡΠΎΡΠ°Ρ ΠΈΠΌΠ΅Π½Π½ΠΎ ΡΡΠΎ ΠΈ Π΄Π΅Π»Π°Π΅Ρ.
ΠΡΠΈΠΌΠ΅Ρ 4.26. ΠΠΎΠ΄ΡΡΠ΅Ρ ΡΡΠ°ΡΠΈΡΡΠΈΠΊΠΈ ΠΏΠΎ ΡΠ΅ΠΊΡΡΠΎΠ²ΠΎΠΌΡ ΡΠ°ΠΉΠ»Ρ
#include <iostream>
#include <fstream>
#include <cstdlib>
#include <cctype>
using namespace std;
void countStuff(istream& in,
int& chars, int& words, int& lines) {
char cur = '\0';
char last = '\0';
chars = words = lines = 0;
while (in.get(cur)) {
if (cur == '\n' ||
(cur == '\f' && last == '\r'))
lines++;
else chars++;
if (!std::isalnum(cur) && // ΠΡΠΎ ΠΊΠΎΠ½Π΅Ρ
std::isalnum(last)) // ΡΠ»ΠΎΠ²Π°
words++;
last = cur;
}
if (chars > 0) { // ΠΠ·ΠΌΠ΅Π½ΠΈΡΡ Π·Π½Π°ΡΠ΅Π½ΠΈΡ ΡΠ»ΠΎΠ²
if (std::isalnum(last)) // ΠΈ ΡΡΡΠΎΠΊ Π΄Π»Ρ ΡΠΏΠ΅ΡΠΈΠ°Π»ΡΠ½ΠΎΠ³ΠΎ
words++; // ΡΠ»ΡΡΠ°Ρ
lines++;
}
}
int main(int argc, char** argv) {
if (argc < 2)
return(EXIT _FAILURE);
ifstream in(argv[1]);
if (!in)
exit(EXIT_FAILURE);
int c, w, l;
countStuff(in, c, w, l);
cout << "ΡΠΈΠΌΠ²ΠΎΠ»ΠΎΠ²: " << c << '\n';
cout << "ΡΠ»ΠΎΠ²: " << w << '\n';
cout << "ΡΡΡΠΎΠΊ: " << l << '\n';
}
ΠΠ±ΡΡΠΆΠ΄Π΅Π½ΠΈΠ΅ΠΡΠΎΡ Π°Π»Π³ΠΎΡΠΈΡΠΌ ΠΎΡΠ΅Π½Ρ ΠΏΡΠΎΡΡ. Π‘ ΡΠΈΠΌΠ²ΠΎΠ»Π°ΠΌΠΈ Π²ΡΠ΅ ΠΏΡΠΎΡΡΠΎ: ΡΠ²Π΅Π»ΠΈΡΠΈΠ²Π°ΠΉΡΠ΅ ΡΡΠ΅ΡΡΠΈΠΊ ΡΠΈΠΌΠ²ΠΎΠ»ΠΎΠ² ΠΏΡΠΈ ΠΊΠ°ΠΆΠ΄ΠΎΠΌ Π²ΡΠ·ΠΎΠ²Π΅ get Π΄Π»Ρ Π²Ρ ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΏΠΎΡΠΎΠΊΠ°. Π‘ΠΎ ΡΡΡΠΎΠΊΠ°ΠΌΠΈ Π²ΡΠ΅ Π½Π΅ Π½Π°ΠΌΠ½ΠΎΠ³ΠΎ ΡΠ»ΠΎΠΆΠ½Π΅Π΅, ΡΠ°ΠΊ ΠΊΠ°ΠΊ ΡΠΏΠΎΡΠΎΠ± ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»Π΅Π½ΠΈΡ ΠΊΠΎΠ½ΡΠΎΠ² ΡΡΡΠΎΠΊ Π·Π°Π²ΠΈΡΠΈΡ ΠΎΡ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΎΠ½Π½ΠΎΠΉ ΡΠΈΡΡΠ΅ΠΌΡ. Π ΡΡΠ°ΡΡΡΡ, ΠΎΠ±ΡΡΠ½ΠΎ ΡΡΠΎ Π»ΠΈΠ±ΠΎ ΡΠΈΠΌΠ²ΠΎΠ» Π½ΠΎΠ²ΠΎΠΉ ΡΡΡΠΎΠΊΠΈ (\n), Π»ΠΈΠ±ΠΎ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»ΡΠ½ΠΎΡΡΡ ΠΈΠ· ΡΠΈΠΌΠ²ΠΎΠ»ΠΎΠ² Π²ΠΎΠ·Π²ΡΠ°ΡΠ° ΠΊΠ°ΡΠ΅ΡΠΊΠΈ ΠΈ ΠΏΠ΅ΡΠ΅Π²ΠΎΠ΄Π° ΡΡΡΠΎΠΊΠΈ (\r\n). ΠΡΡΠ»Π΅ΠΆΠΈΠ²Π°Ρ ΡΠ΅ΠΊΡΡΠΈΠΉ ΠΈ ΠΏΡΠ΅Π΄ΡΠ΄ΡΡΠΈΠΉ ΡΠΈΠΌΠ²ΠΎΠ»Ρ, ΠΌΠΎΠΆΠ½ΠΎ Π»Π΅Π³ΠΊΠΎ ΠΎΠ±Π½Π°ΡΡΠΆΠΈΡΡ Π²Ρ ΠΎΠΆΠ΄Π΅Π½ΠΈΡ ΡΡΠΎΠΉ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»ΡΠ½ΠΎΡΡΠΈ. Π‘ΠΎ ΡΠ»ΠΎΠ²Π°ΠΌΠΈ Π²ΡΠ΅ ΠΏΡΠΎΡΠ΅ ΠΈΠ»ΠΈ ΡΠ»ΠΎΠΆΠ½Π΅Π΅, Π² Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠΈ ΠΎΡ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΡ ΡΠΎΠ³ΠΎ, ΡΡΠΎ ΡΠ°ΠΊΠΎΠ΅ Β«ΡΠ»ΠΎΠ²ΠΎΒ».
ΠΠ»Ρ ΠΏΡΠΈΠΌΠ΅ΡΠ° 4.26 Ρ ΠΏΡΠ΅Π΄ΠΏΠΎΠ»ΠΎΠΆΠΈΠ», ΡΡΠΎ ΡΠ»ΠΎΠ²ΠΎ ΡΡΠΎ Π½Π΅ΡΠ°Π·ΡΡΠ²Π½Π°Ρ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»ΡΠ½ΠΎΡΡΡ Π±ΡΠΊΠ²Π΅Π½Π½ΠΎ-ΡΠΈΡΡΠΎΠ²ΡΡ ΡΠΈΠΌΠ²ΠΎΠ»ΠΎΠ². Π ΠΏΡΠΎΡΠ΅ΡΡΠ΅ ΠΏΡΠΎΡΠΌΠΎΡΡΠ° ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΡΠΈΠΌΠ²ΠΎΠ»Π° Π²Ρ ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΏΠΎΡΠΎΠΊΠ° ΠΏΡΠΈ ΠΎΠ±Π½Π°ΡΡΠΆΠ΅Π½ΠΈΠΈ Π½Π΅Π°Π»ΡΠ°Π²ΠΈΡΠ½ΠΎ-ΡΠΈΡΡΠΎΠ²ΠΎΠ³ΠΎ ΡΠΈΠΌΠ²ΠΎΠ»Π° Ρ ΠΏΡΠΎΠ²Π΅ΡΡΡ ΠΏΡΠ΅Π΄ΡΠ΄ΡΡΠΈΠΉ ΡΠΈΠΌΠ²ΠΎΠ» β Π±ΡΠ» Π»ΠΈ ΠΎΠ½ Π±ΡΠΊΠ²Π΅Π½Π½ΠΎ-ΡΠΈΡΡΠΎΠ²ΡΠΌ ΠΈΠ»ΠΈ Π½Π΅Ρ. ΠΡΠ»ΠΈ Π±ΡΠ» ΡΠΎ ΡΡΠΎ ΠΊΠΎΠ½Π΅Ρ ΡΠ»ΠΎΠ²Π°, ΠΈ Ρ ΡΠ²Π΅Π»ΠΈΡΠΈΠ²Π°Ρ ΡΡΠ΅ΡΡΠΈΠΊ ΡΠ»ΠΎΠ². ΠΠΏΡΠ΅Π΄Π΅Π»ΠΈΡΡ, ΡΠ²Π»ΡΠ΅ΡΡΡ Π»ΠΈ ΡΠΈΠΌΠ²ΠΎΠ» Π±ΡΠΊΠ²Π΅Π½Π½ΠΎ-ΡΠΈΡΡΠΎΠ²ΡΠΌ, ΠΌΠΎΠΆΠ½ΠΎ Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΡΡΠ½ΠΊΡΠΈΠΈ isalnum ΠΈΠ· <cctype>. ΠΠΎ ΡΡΠΎ Π΅ΡΠ΅ Π½Π΅ Π²ΡΠ΅ β Ρ ΠΏΠΎΠΌΠΎΡΡΡ Π°Π½Π°Π»ΠΎΠ³ΠΈΡΠ½ΡΡ ΡΡΠ½ΠΊΡΠΈΠΉ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡΠΎΠ²Π΅ΡΡΡΡ ΡΠΈΠΌΠ²ΠΎΠ»Ρ Π½Π° ΡΠ΅Π»ΡΠΉ ΡΡΠ΄ Π΄ΡΡΠ³ΠΈΡ ΠΊΠ°ΡΠ΅ΡΡΠ². Π€ΡΠ½ΠΊΡΠΈΠΈ, ΠΊΠΎΡΠΎΡΡΠ΅ ΠΏΡΠ΅Π΄Π½Π°Π·Π½Π°ΡΠ΅Π½Ρ Π΄Π»Ρ ΠΏΡΠΎΠ²Π΅ΡΠΊΠΈ Ρ Π°ΡΠ°ΠΊΡΠ΅ΡΠΈΡΡΠΈΠΊ ΡΠΈΠΌΠ²ΠΎΠ»ΠΎΠ², ΠΏΡΠΈΠ²Π΅Π΄Π΅Π½Ρ Π² ΡΠ°Π±Π». 4.3. ΠΠ»Ρ ΡΠΈΡΠΎΠΊΠΈΡ ΡΠΈΠΌΠ²ΠΎΠ»ΠΎΠ² ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠΉΡΠ΅ ΡΡΠ½ΠΊΡΠΈΠΈ Ρ ΡΠ°ΠΊΠΈΠΌΠΈ ΠΆΠ΅ ΠΈΠΌΠ΅Π½Π°ΠΌΠΈ, Π½ΠΎ Ρ Π±ΡΠΊΠ²ΠΎΠΉ Β«wΒ» ΠΏΠΎΡΠ»Π΅ Β«isΒ», Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ iswSpace. ΠΠ΅ΡΡΠΈΠΈ Π΄Π»Ρ ΡΠΈΡΠΎΠΊΠΈΡ ΡΠΈΠΌΠ²ΠΎΠ»ΠΎΠ² ΠΎΠ±ΡΡΠ²Π»Π΅Π½Ρ Π² Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΎΡΠ½ΠΎΠΌ ΡΠ°ΠΉΠ»Π΅ <cwctype>.
Π’Π°Π±Π». 4.3. Π€ΡΠ½ΠΊΡΠΈΠΈ Π΄Π»Ρ ΠΏΡΠΎΠ²Π΅ΡΠΊΠΈ ΡΠΈΠΌΠ²ΠΎΠ»ΠΎΠ² ΠΈΠ· <cctype> ΠΈ <cwctype>
Π€ΡΠ½ΠΊΡΠΈΡ ΠΠΏΠΈΡΠ°Π½ΠΈΠ΅ isalpha iswalpha ΠΡΠΊΠ²Π΅Π½Π½ΡΠ΅ ΡΠΈΠΌΠ²ΠΎΠ»Ρ: a-z, A-Z (Π²Π΅ΡΡ Π½ΠΈΠΉ ΠΈΠ»ΠΈ Π½ΠΈΠΆΠ½ΠΈΠΉ ΡΠ΅Π³ΠΈΡΡΡ) isupper iswupper ΠΡΠΊΠ²Π΅Π½Π½ΡΠ΅ ΡΠΈΠΌΠ²ΠΎΠ»Ρ Π²Π΅ΡΡ Π½Π΅Π³ΠΎ ΡΠ΅Π³ΠΈΡΡΡΠ°: A-Z islower iswlower ΠΡΠΊΠ²Π΅Π½Π½ΡΠ΅ ΡΠΈΠΌΠ²ΠΎΠ»Ρ Π½ΠΈΠΆΠ½Π΅Π³ΠΎ ΡΠ΅Π³ΠΈΡΡΡΠ°: a-z isdigit iswdigit Π§ΠΈΡΠ»ΠΎΠ²ΡΠ΅ ΡΠΈΠΌΠ²ΠΎΠ»Ρ: 0-9 isxdigit iswxdigit Π¨Π΅ΡΡΠ½Π°Π΄ΡΠ°ΡΠ΅ΡΠΈΡΠ½ΡΠ΅ ΡΠΈΡΠ»ΠΎΠ²ΡΠ΅ ΡΠΈΠΌΠ²ΠΎΠ»Ρ: 0-9, a-f, A-F isspace iswspace ΠΡΠΎΠ±Π΅Π»ΡΠ½ΡΠ΅ ΡΠΈΠΌΠ²ΠΎΠ»Ρ. ' ', \n, \t, \v, \r, \l iscntrl iswcntrl Π£ΠΏΡΠ°Π²Π»ΡΡΡΠΈΠ΅ ΡΠΈΠΌΠ²ΠΎΠ»Ρ: ASCII 0-31 ΠΈ 127 ispunct iswpunct Π‘ΠΈΠΌΠ²ΠΎΠ»Ρ ΠΏΡΠ½ΠΊΡΡΠ°ΡΠΈΠΈ, Π½Π΅ ΠΏΡΠΈΠ½Π°Π΄Π»Π΅ΠΆΠ°ΡΠΈΠ΅ ΠΏΡΠ΅Π΄ΡΠ΄ΡΡΠΈΠΌ Π³ΡΡΠΏΠΏΠ°ΠΌ isalnum iswalnum isalpha ΠΈΠ»ΠΈ isdigit ΡΠ°Π²Π½Ρ true isprint iswprint ΠΠ΅ΡΠ°ΡΠ°Π΅ΠΌΡΠ΅ ΡΠΈΠΌΠ²ΠΎΠ»Ρ ASCII isgraph iswgraph isalpha, isdigit ΠΈΠ»ΠΈ ispunct ΡΠ°Π²Π½Ρ trueΠΠΎΡΠ»Π΅ ΡΠΎΠ³ΠΎ ΠΊΠ°ΠΊ Π±ΡΠ»ΠΈ ΠΏΡΠΎΡΡΠ΅Π½Ρ Π²ΡΠ΅ ΡΠΈΠΌΠ²ΠΎΠ»Ρ ΠΈ Π΄ΠΎΡΡΠΈΠ³Π½ΡΡ ΠΊΠΎΠ½Π΅Ρ ΡΠ°ΠΉΠ»Π°, ΡΡΠ΅Π±ΡΠ΅ΡΡΡ ΡΠ΄Π΅Π»Π°ΡΡ Π΅ΡΠ΅ ΠΊΠΎΠ΅-ΡΡΠΎ. ΠΠΎ-ΠΏΠ΅ΡΠ²ΡΡ , ΡΡΡΠΎΠ³ΠΎ Π³ΠΎΠ²ΠΎΡΡ, ΡΠΈΠΊΠ» ΠΏΠΎΠ΄ΡΡΠΈΡΡΠ²Π°Π΅Ρ ΡΠΎΠ»ΡΠΊΠΎ ΠΏΠ΅ΡΠ΅Π½ΠΎΡΡ ΡΡΡΠΎΠΊ, Π° Π½Π΅ ΡΠ°ΠΌΠΈ ΡΡΡΠΎΠΊΠΈ. Π‘Π»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»ΡΠ½ΠΎ, ΡΡΠΎ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ Π±ΡΠ΄Π΅Ρ Π½Π° ΠΎΠ΄Π½Ρ ΠΌΠ΅Π½ΡΡΠ΅, ΡΠ΅ΠΌ ΡΠ΅Π°Π»ΡΠ½ΠΎΠ΅ ΡΠΈΡΠ»ΠΎ ΡΡΡΠΎΠΊ. Π§ΡΠΎΠ±Ρ ΡΠ΅ΡΠΈΡΡ ΡΡΡ ΠΏΡΠΎΠ±Π»Π΅ΠΌΡ, Ρ, Π΅ΡΠ»ΠΈ ΡΠ°ΠΉΠ» ΡΠΎΠ΄Π΅ΡΠΆΠΈΡ Π½Π΅Π½ΡΠ»Π΅Π²ΠΎΠ΅ ΡΠΈΡΠ»ΠΎ ΡΠΈΠΌΠ²ΠΎΠ»ΠΎΠ², ΠΏΡΠΎΡΡΠΎ ΡΠ²Π΅Π»ΠΈΡΠΈΠ²Π°Ρ ΡΡΠ΅ΡΡΠΈΠΊ ΡΡΡΠΎΠΊ Π½Π° Π΅Π΄ΠΈΠ½ΠΈΡΡ. ΠΠΎ-Π²ΡΠΎΡΡΡ , Π΅ΡΠ»ΠΈ ΠΏΠΎΡΠΎΠΊ Π·Π°ΠΊΠ°Π½ΡΠΈΠ²Π°Π΅ΡΡΡ Π½Π° Π±ΡΠΊΠ²Π΅Π½Π½ΠΎ-ΡΠΈΡΡΠΎΠ²ΠΎΠΉ ΡΠΈΠΌΠ²ΠΎΠ», ΡΠΎ ΠΏΠΎΠΈΡΠΊ ΠΊΠΎΠ½ΡΠ° ΠΏΠΎΡΠ»Π΅Π΄Π½Π΅Π³ΠΎ ΡΠ»ΠΎΠ²Π° Π½Π΅ ΡΡΠ°Π±ΠΎΡΠ°Π΅Ρ, ΡΠ°ΠΊ ΠΊΠ°ΠΊ Π½Π΅ Π±ΡΠ΄Π΅Ρ ΡΠ»Π΅Π΄ΡΡΡΠ΅Π³ΠΎ ΡΠΈΠΌΠ²ΠΎΠ»Π°. Π§ΡΠΎΠ±Ρ ΡΡΠ΅ΡΡΡ ΡΡΠΎ, Ρ ΠΏΡΠΎΠ²Π΅ΡΡΡ, ΡΠ²Π»ΡΠ΅ΡΡΡ Π»ΠΈ ΠΏΠΎΡΠ»Π΅Π΄Π½ΠΈΠΉ ΡΠΈΠΌΠ²ΠΎΠ» ΠΏΠΎΡΠΎΠΊΠ° Π±ΡΠΊΠ²Π΅Π½Π½ΠΎ-ΡΠΈΡΡΠΎΠ²ΡΠΌ (ΡΠ°ΠΊΠΆΠ΅ ΡΠΎΠ»ΡΠΊΠΎ Π² ΡΠΎΠΌ ΡΠ»ΡΡΠ°Π΅, Π΅ΡΠ»ΠΈ Π² ΡΠ°ΠΉΠ»Π΅ ΡΠΎΠ΄Π΅ΡΠΆΠΈΡΡΡ Π½Π΅Π½ΡΠ»Π΅Π²ΠΎΠ΅ ΡΠΈΡΠ»ΠΎ ΡΠΈΠΌΠ²ΠΎΠ»ΠΎΠ²), ΠΈ ΡΠ²Π΅Π»ΠΈΡΠΈΠ²Π°Ρ ΡΡΠ΅ΡΡΠΈΠΊ ΡΠ»ΠΎΠ² Π½Π° Π΅Π΄ΠΈΠ½ΠΈΡΡ.
ΠΠ΅ΡΠΎΠ΄ΠΈΠΊΠ° ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ ΠΏΠΎΡΠΎΠΊΠΎΠ² Π² ΠΏΡΠΈΠΌΠ΅ΡΠ΅ 4.26 ΠΏΠΎΡΡΠΈ ΠΈΠ΄Π΅Π½ΡΠΈΡΠ½Π° ΡΠΎΠΉ, ΠΊΠΎΡΠΎΡΠ°Ρ ΠΎΠΏΠΈΡΠ°Π½Π° Π² ΡΠ΅ΡΠ΅ΠΏΡΠ°Ρ 4.14 ΠΈ 4.15, Π½ΠΎ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΠΏΡΠΎΡΠ΅, ΡΠ°ΠΊ ΠΊΠ°ΠΊ ΠΎΠ½ ΡΠΎΠ»ΡΠΊΠΎ ΠΈΡΡΠ»Π΅Π΄ΡΠ΅Ρ ΡΠ°ΠΉΠ», Π½Π΅ Π²Π½ΠΎΡΡ Π½ΠΈΠΊΠ°ΠΊΠΈΡ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ.
Π‘ΠΌΠΎΡΡΠΈ ΡΠ°ΠΊΠΆΠ΅Π Π΅ΡΠ΅ΠΏΡΡ 4.14 ΠΈ 4.15.
4.18. ΠΠΎΠ΄ΡΡΠ΅Ρ Π²Ρ ΠΎΠΆΠ΄Π΅Π½ΠΈΠΉ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΡΠ»ΠΎΠ²Π° Π² ΡΠ΅ΠΊΡΡΠΎΠ²ΠΎΠΌ ΡΠ°ΠΉΠ»Π΅
Π’ΡΠ΅Π±ΡΠ΅ΡΡΡ ΠΏΠΎΠ΄ΡΡΠΈΡΠ°ΡΡ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ Π²Ρ ΠΎΠΆΠ΄Π΅Π½ΠΈΠΉ Π² ΡΠ΅ΠΊΡΡΠΎΠ²ΠΎΠΌ ΡΠ°ΠΉΠ»Π΅ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΡΠ»ΠΎΠ²Π°.
Π Π΅ΡΠ΅Π½ΠΈΠ΅ΠΠ»Ρ ΡΡΠ΅Π½ΠΈΡ ΠΈΠ· ΡΠ΅ΠΊΡΡΠΎΠ²ΠΎΠ³ΠΎ ΡΠ°ΠΉΠ»Π° Π½Π΅ΠΏΡΠ΅ΡΡΠ²Π½ΡΡ ΡΡΠ°Π³ΠΌΠ΅Π½ΡΠΎΠ² ΡΠ΅ΠΊΡΡΠ° ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠΉΡΠ΅ operator>>, ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Π½ΡΠΉ Π² <string>, Π° Π΄Π»Ρ ΡΠΎΡ ΡΠ°Π½Π΅Π½ΠΈΡ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΡΠ»ΠΎΠ²Π° ΠΈ Π΅Π³ΠΎ ΡΠ°ΡΡΠΎΡΡ Π² ΡΠ°ΠΉΠ»Π΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠΉΡΠ΅ map, ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Π½ΡΠΉ Π² <map>. ΠΡΠΈΠΌΠ΅Ρ 4.27 Π΄Π΅ΠΌΠΎΠ½ΡΡΡΠΈΡΡΠ΅Ρ, ΠΊΠ°ΠΊ ΡΡΠΎ Π΄Π΅Π»Π°Π΅ΡΡΡ.
ΠΡΠΈΠΌΠ΅Ρ 4.27. ΠΠΎΠ΄ΡΡΠ΅Ρ ΡΠ°ΡΡΠΎΡΡ ΡΠ»ΠΎΠ²
1 #include <iostream>
2 #include <fstream>
3 #include <map>
4 #include <string>
5
6 typedef std::map<std::string, int> StrIntMap;
7
8 void countWords(std::istream& in, StrIntMap& words) {
9
10 std::string s;
11
12 while (in >> s) {
13 ++words[s];
14 }
15 }
16
17 int main(int argc, char** argv) {
18
19 if (argc < 2)
20 return(EXIT_FAILURE);
21
22 std::ifstream in(argv[1]);
23
24 if (!in)
25 exit(EXIT_FAILURE);
26
27 StrIntMap w;
28 countWords(in, w);
29
30 for (StrIntMap::iterator p = w.begin();
31 p != w.end(); ++p) {
32 std::cout << p->first << " ΠΏΡΠΈΡΡΡΡΡΠ²ΡΠ΅Ρ "
33 << p->second << " ΡΠ°Π·.\n";
34 }
35 }
ΠΠ±ΡΡΠΆΠ΄Π΅Π½ΠΈΠ΅ΠΡΠΈΠΌΠ΅Ρ 4.27 ΠΊΠ°ΠΆΠ΅ΡΡΡ Π²ΠΏΠΎΠ»Π½Π΅ ΠΏΡΠΎΡΡΡΠΌ, Π½ΠΎ Π² Π½Π΅ΠΌ Π΄Π΅Π»Π°Π΅ΡΡΡ Π±ΠΎΠ»ΡΡΠ΅, ΡΠ΅ΠΌ ΠΊΠ°ΠΆΠ΅ΡΡΡ. ΠΠΎΠ»ΡΡΠ°Ρ ΡΠ°ΡΡΡ ΡΠΎΠ½ΠΊΠΎΡΡΠ΅ΠΉ ΡΠ²ΡΠ·Π°Π½Π° Ρ map, ΡΠ°ΠΊ ΡΡΠΎ Π²Π½Π°ΡΠ°Π»Π΅ Π΄Π°Π²Π°ΠΉΡΠ΅ ΠΎΠ±ΡΡΠ΄ΠΈΠΌ Π΅Π³ΠΎ.