Advertisement
Guest User

Untitled

a guest
May 31st, 2016
159
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 4.69 KB | None | 0 0
  1. /**
  2.  * Варіант 8
  3.  * Написати програму, яка:
  4.  * • Виводить текст на екран дисплея;
  5.  * • Визначає кількість символів в найкоротшому слові;
  6.  * • По натисненню довільної клавіші по черзі виділяє кожне слово тексту, що містить мінімальну кількість символів.
  7. */
  8.  
  9. #include <iostream>
  10. // to read from file
  11. #include <fstream>
  12. #include <string>
  13. #include <vector>
  14. // to use istringstream which facilitates spliting string on words
  15. #include <sstream>
  16. // used in clearScreen
  17. #include <stdio.h>
  18. #include <algorithm>
  19.  
  20. using namespace std;
  21.  
  22. // read string from file
  23. string getContent();
  24. // split string on words
  25. vector<string> stringToWords(string content);
  26. // print vector and CAPITALIZE highlight word
  27. void printVector(vector<string> vec, string highlight);
  28. // convert string to lower case
  29. string toLowerCase(string s);
  30. // convert string to UPPER case
  31. string toUpperCase(string s);
  32. // convert vector to vector with unique values
  33. vector<string> uniqueVectorKeys(vector<string>);
  34.  
  35. // sort vector by string length
  36. // result vector will have smaller strings at the beginning
  37. vector<string> sortVectorByWordLength(vector<string> vec);
  38. // function used in sortVectorByWordLength
  39. // to compare 2 strings
  40. // returns true if a is shorter then b
  41. bool sortWordByLength(string a, string b);
  42.  
  43. // removes content from screen
  44. // will be used to rewrite console screen
  45. void clearScreen();
  46.  
  47. int main() {
  48.     // read and convert to lower case
  49.     // we convert to lower case because we highlight words
  50.     // by making them uppercase
  51.     // It will be more visual if else in lower case
  52.     string content = toLowerCase(getContent());
  53.     vector<string> vec = stringToWords(content);
  54.     // unique words from file ordered in ascending way: a, aa, aaa, aaaa
  55.     vector<string> words = sortVectorByWordLength(uniqueVectorKeys(vec));
  56.     // word which we will be highlighting
  57.     string highlight = "";
  58.     // iterator to run over words
  59.     vector<string>::iterator it = words.begin();
  60.    
  61.     do {
  62.         // clean screen before use
  63.         // it will allow to rewrite output when user clicks ENTER
  64.         clearScreen();
  65.         // reach current word
  66.         highlight = *it;
  67.         cout << "Current smallest word: \"" << highlight << "\", length: " << highlight.length() << endl << endl;
  68.         // print input vector and UPPERCASE current word
  69.         printVector(vec, highlight);
  70.         cout << endl << endl;
  71.         // So, just press enter on your keyboard
  72.         cout << "Press ENTER key to highligh next min word";
  73.         // To wait for enter
  74.         cin.get();
  75.         // To read next word
  76.         it++;
  77.     } while(it != words.end());
  78.    
  79.     return 0;
  80. }
  81.  
  82. vector<string> uniqueVectorKeys(vector<string> vec) {
  83.     sort(vec.begin(), vec.end());
  84.     vec.erase(unique( vec.begin(), vec.end() ), vec.end());
  85.     return vec;
  86. }
  87.  
  88. bool sortWordByLength(string a, string b) {
  89.     return a.length() < b.length();
  90. }
  91.  
  92. vector<string> sortVectorByWordLength(vector<string> vec) {
  93.     sort(vec.begin(), vec.end(), sortWordByLength);
  94.     return vec;
  95. }
  96.  
  97. void printVector(vector<string> vec, string highlight) {
  98.     string word;
  99.    
  100.     for(vector<string>::iterator it = vec.begin(); it != vec.end(); ++it) {
  101.         word = *it;
  102.        
  103.         if(word == highlight) {
  104.             word = toUpperCase(word);
  105.         }
  106.        
  107.         cout << word << " ";
  108.     }
  109. }
  110.  
  111. vector<string> stringToWords(string content) {
  112.     vector<string> vec;
  113.    
  114.     istringstream iss(content);
  115.     copy(istream_iterator<string>(iss),
  116.          istream_iterator<string>(),
  117.          back_inserter(vec));
  118.    
  119.     return vec;
  120. }
  121.  
  122. string getContent() {
  123.     // make this path your own!
  124.     // I cound not place file inside project's dir
  125.     // because I have different development environment
  126.     ifstream in("/Users/oknyga/data.dat");
  127.     string contents((istreambuf_iterator<char>(in)), istreambuf_iterator<char>());
  128.    
  129.     return contents;
  130. }
  131.  
  132. string toLowerCase(string s) {
  133.     transform(s.begin(), s.end(), s.begin(), ::tolower);
  134.     return s;
  135. }
  136.  
  137. string toUpperCase(string s) {
  138.     transform(s.begin(), s.end(), s.begin(), ::toupper);
  139.     return s;
  140. }
  141.  
  142. // OS dependent code
  143. // Because I was developing on OSX
  144. // and code will be run on Windows
  145. // I created function which can clean
  146. // on both Windows and Unix (in teory)
  147. #ifdef __cplusplus__
  148. void clearScreen() {
  149.     cout << string( 100, '\n' );
  150. }
  151. #else
  152. void clearScreen() {
  153.     int n;
  154.     for (n = 0; n < 10; n++)
  155.         printf( "\n\n\n\n\n\n\n\n\n\n" );
  156. }
  157. #endif
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement