Π§ΠΈΡ‚Π°ΠΉΡ‚Π΅ ΠΊΠ½ΠΈΠ³ΠΈ ΠΎΠ½Π»Π°ΠΉΠ½ Π½Π° Bookidrom.ru! БСсплатныС ΠΊΠ½ΠΈΠ³ΠΈ Π² ΠΎΠ΄Π½ΠΎΠΌ ΠΊΠ»ΠΈΠΊΠ΅

Π§ΠΈΡ‚Π°Ρ‚ΡŒ ΠΎΠ½Π»Π°ΠΉΠ½ Β«C++. Π‘Π±ΠΎΡ€Π½ΠΈΠΊ Ρ€Π΅Ρ†Π΅ΠΏΡ‚ΠΎΠ²Β». Π‘Ρ‚Ρ€Π°Π½ΠΈΡ†Π° 48

Автор Π”. БтСфСнс

   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, Ρ‚Π°ΠΊ Ρ‡Ρ‚ΠΎ Π²Π½Π°Ρ‡Π°Π»Π΅ Π΄Π°Π²Π°ΠΉΡ‚Π΅ обсудим Π΅Π³ΠΎ.