Advertisement
SteelK

Untitled

Jun 1st, 2017
76
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.48 KB | None | 0 0
  1. #include "stdafx.h"
  2. #include <iostream>
  3. #include <string>
  4. #include <stdio.h>
  5.  
  6. using namespace std;
  7.  
  8. //Возвращает кол-во пробелов в строке
  9. size_t sizeSpaceInString(char* str, size_t size) {
  10.     size_t space = 0;
  11.     for (size_t i = 0; i < size; i++)
  12.         if (str[i] == ' ')
  13.             space++;
  14.     return space+1;
  15. }
  16.  
  17. //Вычленяет слова из строки и возвращает их в виде списка (двумерного массива)
  18. char** apartWord(char* inStr, size_t sizeInStr , size_t spaceInStr) {
  19.     char** wordMas = new char*[spaceInStr];
  20.     cout << "new char** done" << endl;
  21.  
  22.     size_t spaceSelector = 0, i= 0, j = 0, lenWord = 0;
  23.     cout << sizeInStr << endl;
  24.     while ((spaceSelector < spaceInStr) || (i <= sizeInStr)) {
  25.         while (1) {
  26.             if (inStr[i] != ' ' && i < sizeInStr) {
  27.                 lenWord++;
  28.                 i++;
  29.             }
  30.             else{
  31.                 i -= lenWord;
  32.                 break;
  33.             }
  34.         }
  35.  
  36.         wordMas[spaceSelector] = new char[lenWord];
  37.         for (size_t z = 0; z < lenWord; i++, z++) {
  38.             wordMas[spaceSelector][z] = inStr[i];
  39.         }
  40.         cout << "wordMas[" << spaceSelector << "] = " << wordMas[spaceSelector] << endl;
  41.         i++; //Перешагиваем пробел
  42.         lenWord = 0;
  43.         spaceSelector++;
  44.     }
  45.     return wordMas;
  46. }
  47.  
  48. //Вывод слов из массива слов
  49. void coutWordMas(char** inWordMas, size_t size){
  50.     for(size_t i = 0; i < size; i++)
  51.         cout << inWordMas[i] << endl;
  52. }
  53.  
  54. //Удаление двумерного массива
  55. void delWordMas(char** inWordMas, size_t size) {
  56.     for(size_t i = 0; i < size; i++)
  57.         delete inWordMas[i];
  58.     delete []inWordMas;
  59. }
  60.  
  61. //Проверка на совпадение с последним словом
  62. void coincidenceLatter(char** inWordMas, size_t size) {
  63.     cout << "Слова, не совпадающие с последним словом:" << endl;
  64.     for (size_t z = 0; z < size; z++)
  65.         if ((strcmp(inWordMas[size-1], inWordMas[z])))
  66.             cout << inWordMas[z] << " ";
  67.     cout << endl;
  68. }
  69.  
  70.  
  71. int main() {
  72.     setlocale(0, "");
  73.  
  74.     const int length = 79;
  75.     char s[length];
  76.    
  77.     cout << "Введите строку:\n";
  78.     cin.getline(s, 79);
  79.     size_t sizeS = strlen(s);
  80.     cout << "Write done, strlen = " << sizeS << endl;
  81.    
  82.     size_t spaceInS = sizeSpaceInString(s, sizeS);
  83.     cout << "spaceInS = " << spaceInS << endl;
  84.  
  85.     char **wordMas = apartWord(s, sizeS, spaceInS);
  86.     cout << "apartWord done" << endl;
  87.  
  88.     coutWordMas(wordMas, spaceInS);
  89.     coincidenceLatter(wordMas, spaceInS);
  90.     delWordMas(wordMas, spaceInS);
  91.     return 0;
  92. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement