Advertisement
semenrbt

Kristina_4.4.3

Feb 5th, 2020
193
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 2.92 KB | None | 0 0
  1. #include <stdio.h>
  2.  
  3. int SearchSubStr(char *str, char *substr){ // Функция поиска подстроки в строке. На вход передается указатель на элемент строки и подстрока
  4.     int SizeSubStr = 0;      
  5.     int SizeStr = 0;
  6.     int pos = 0, m = 0;
  7.     while(str[SizeStr] > 13) SizeStr++; // Определяется размер строки
  8.     while(substr[SizeSubStr] > 13) SizeSubStr++; // Размер подстроки
  9.     while(pos <= (SizeStr - SizeSubStr)){ // Ищем подстроку в строке
  10.         for(m = 0; m < SizeSubStr && str[pos + m] == substr[m]; m++);
  11.         if(m == SizeSubStr) return pos;        
  12.         pos++;
  13.     }
  14.     return -1;  // Когда не будет вхождения подстроки в строке, функция отдаст значение -1
  15. }
  16.  
  17.  
  18. int main(void) {  
  19.   char Str[] = "jaaaaaaaj,jaaaaaaaaaaaaaaaj aaaaaaaaaaaaj kkkkkkkkkak.";
  20.   char dot[] = ".";
  21.   char delimiter1[] = ",";
  22.   char delimiter2[] = " ";
  23.   int L = SearchSubStr(Str, dot); // Находим расстояние до точки(длинну строки)
  24.   int length = 0;
  25.   if(L < 0 || Str[L+1] > 13){ // Если не нашлась точка, или после точки еще что то есть
  26.     printf("Error. Net konca stroki.\n"); // Выдаем ошибку
  27.     return 0;
  28.   }
  29.   int a = SearchSubStr(Str, delimiter1); // Расстояние до запятой
  30.   int b = SearchSubStr(Str, delimiter2); // Расстояние до пробела
  31.   int counter = 0;
  32.   while(length < L) // Пока не пройдем всю строку
  33.   {
  34.     if(a == 0 || b == 0) // На тот случай если будет комбинация двух пробелов, двух запятых
  35.     { // Или запятой пробела. По условию все слова непустые
  36.       printf("Pustoe slovo. Error.\n");
  37.       return 0;
  38.     }
  39.     if((a < b && a > 0) || (a > 0 && b < 0)) // Когда запятая ближе чем пробел
  40.     {
  41.       if(Str[length] == Str[length + a-1]) counter++; // Проверка, подходит ли слово по условию
  42.       length = length + a;
  43.     }
  44.     if((b < a && b > 0) || (b > 0 && a < 0)) // Когда пробел ближе чем запятая
  45.     {
  46.       if(Str[length] == Str[length + b -1]) counter++;
  47.       length = length + b;
  48.     }
  49.     length++;
  50.     a = SearchSubStr(&Str[length], delimiter1);
  51.     b = SearchSubStr(&Str[length], delimiter2);
  52.     if(a < 0 && b < 0){ // Когда не осталось ни запятой, ни пробела, проверяем удовлетворяет ли условию последнее слово и выходим из цикла
  53.       if(Str[length] == Str[L-1]){
  54.         counter++;
  55.       }
  56.       length = L + 1;
  57.     }
  58.   }
  59.   printf("slov: %d\n", counter);
  60.  
  61.  
  62.  
  63.   return 0;
  64. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement