Advertisement
Balda

Строки и функции

Jan 9th, 2014
151
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 3.07 KB | None | 0 0
  1. /*задача №1.    Произвести выравнивание по правому краю введенного текста, для чего к каждой строке применить функцию WIDE(str,k), которая равномерно вставляет пробелы между словами так, чтобы длина строки str стала равной k. (Величина k  должна быть больше длины самой длинной строки текста.)
  2. задача №2.  Напишите программу, определяющую, является ли введенная строка палиндромом. Палиндром – фраза, которая читается справа налево и слева направо одинаково без учета регистра букв и наличия пробелов. Например, строка Аргентина манит негра — является палиндромом.*/
  3.  
  4. #pragma warning(disable:4018)
  5. #include <iostream>
  6. #include <Windows.h>
  7. #include <string.h>
  8. using namespace std;
  9.  
  10. void string_packing(char *string, char *packed_string)
  11. {
  12.     unsigned int i, k;
  13.     for (i = 0, k = 0; i < strlen(string); i++)
  14.     {
  15.         if (string[i] != ' ')
  16.         {
  17.             packed_string[k] = string[i];
  18.             k++;
  19.         }
  20.     }
  21. }
  22.  
  23. bool string_polindrome(char *string)
  24. {
  25.     bool flag = true;
  26.     unsigned int i;
  27.     for (i = 0; i < strlen(string) / 2; i++)
  28.         if (string[i] != string[strlen(string) - i - 1])
  29.             flag = false;
  30.         return flag;
  31. }
  32.  
  33.  
  34. void WIDE(char *string, char *replace_string, int size)
  35. {
  36.     unsigned int i, j, k;
  37.     char space[1] = { ' ' };
  38.     int space_counter = 0;
  39.     int need_space;
  40.     int counter = 0;
  41.     int string_length = strlen(string);
  42.     // Считаем пробелы
  43.     for (i = 0; i < string_length; i++)
  44.     {
  45.         if (string[i] == ' ')
  46.             space_counter++;
  47.     }
  48.     if (space_counter == 0) space_counter = 1;
  49.     // На каждый пробел - ставим M пробелов
  50.     need_space = (size - string_length) / space_counter + 1;
  51.     for (i = 0, k = 0; i < string_length; i++)
  52.     {
  53.         if (string[i] != ' ')
  54.         {
  55.             replace_string[k] = string[i];
  56.             k++;
  57.         }
  58.         else
  59.         {
  60.         for (j = 0; j < need_space; j++)
  61.             {
  62.                 if (strlen(replace_string) < size)
  63.                 {
  64.                     replace_string[k]=' ';
  65.                     k++;
  66.                 }
  67.             }
  68.         }
  69.     }
  70.     replace_string[k] = '\0';
  71. }
  72.  
  73. int main()
  74. {
  75.    
  76.     SetConsoleCP(1251);
  77.     SetConsoleOutputCP(1251);
  78.     int k;
  79.     bool flag;
  80.     char string[80] = { 0 }, packed_string[80] = { 0 }, sec_string[80] = { 0 }, replace_string[80] = { 0 };
  81.     cout << "Фраза: ";
  82.         cin.getline(string, 80);
  83.     string_packing(string, packed_string); // удаляем все разделители
  84.     cout << packed_string << endl;
  85.     flag = string_polindrome(packed_string);
  86.     if (flag == true)
  87.         cout << "Палиндром" << endl;
  88.     else
  89.         cout << "Не палиндром" << endl;
  90.     cout << "Исходная строка: ";
  91.         cin.getline(sec_string, 80);
  92.     cout << "Выравнивание: ";
  93.         cin >> k;
  94.     WIDE(sec_string, replace_string, k);
  95.     cout << replace_string << endl;
  96. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement