Advertisement
sbitnev

laba 3

Apr 7th, 2016
70
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 3.01 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <ctype.h>
  3. #include <string.h>
  4. //поиск подстрок
  5. void substr (int n, char str[][81], char str1[][81], int *n1, int num [])
  6. {int i; char *s,*s1; //s-на текущий символ. s1- на начало подстроки
  7. *n1=0; //число подстрок
  8. for(i=0;i<n;i++)
  9. {s=str[i];
  10. s1=s;
  11.  
  12.  
  13. while(*s)
  14.     if (*s=='/*' || *s=='/' || *s=='*')
  15. {if (s!=s1)
  16. { //копирование подстроки
  17. num [*n1]=i; //запоминаем номер исходной cтроки
  18. strncpy(str1[*n1],s1,s-s1); //копируем часть строки
  19. str1[*n1][s-s1]='\0'; //добавляем нуль-символ в конец копии
  20. (*n1)++; //увеличиваем число подстрок
  21. }
  22. while(*s && (*s=='/*' || *s=='/' || *s=='*'))s++;
  23.  
  24.  
  25. s1=s; //начало новой подстроки
  26. }
  27. else s++;
  28. if (s!=s1)
  29. { //копирование подстроки, расположенной в конце строки
  30. num [*n1]=i;
  31. strncpy(str1[*n1],s1,s-s1);
  32. str1[*n1][s-s1]='\0';
  33. (*n1)++;
  34. }
  35. } //закрывающаяся скобка от цикла for
  36. }
  37.  
  38.  
  39. //поиск номера подстроки (вернет –1 если нет нужной подстроки)
  40. int nomer (char str1[][81], int n1) //возвращает номер подстроки
  41. {
  42. int max=0, maxi=-1, i;
  43. char *s; //указатель на текущий символ
  44. for(i=0;i<n1;i++)
  45. {
  46. s=str1[i];
  47. if(*s=='.') s++; //пропуск цифр
  48. if ( s>max ) //цифр больше всего
  49. max=s,maxi=i;
  50. s=0;
  51. }
  52. return(maxi);
  53. }
  54. //преобразование исходной строки
  55. int preobr(char *s) //возвращает признак преобразования
  56. {
  57. char *s1=s,*s2; int f=0;
  58. while(*s1&& *s1==' ')s1++; //поиск первого не пробела
  59. if (!*s1){ *s='\0'; f=1;} //все пробелы
  60. else
  61. {
  62. if (s!=s1) //есть пробелы в начале строки
  63. f=1;
  64. s2=s+strlen(s)-1;
  65. //s2-на символе перед '\0'
  66. while(*s2==' ') s2--;
  67. //s2-на последнем символе перед пробелом
  68. if (s2!=s+strlen(s)-1) f=1; //есть пробелы в конце строки
  69. strncpy(s,s1,s2-s1+1);
  70. *(s+(s2-s1)+1)='\0';
  71. }
  72. return f;
  73. }
  74. int main()
  75. {
  76. char str[10][81], str1[30][81];
  77. int i, i1, n=0, n1, num[30], f;
  78. //ввод строк до пустой или CTRL+Z
  79. puts("Input strings:\n");
  80. while (*gets(str[n]) && *str[n]&&n<10) n++;
  81. substr (n,str,str1,&n1,num);
  82. if (n1==0)
  83. puts("No substrings");
  84. else
  85. {
  86. puts("Substings");
  87. for(i=0;i<n1;i++)
  88. puts(str1[i]);
  89. i1= nomer (str1,n1);
  90. if (i1==-1)
  91. puts("No necessary substring");
  92. else
  93. {puts("Substring with the maximum number of points in the beginning");
  94. puts(str1[i1]);
  95. f= preobr(str[num[i1]]);
  96. if (f)
  97. {
  98. printf("%d\'th line of source array has been converted:\n",num[i1]);
  99. //преобразованная %d -я строка исходного массива
  100. puts(str[num[i1]]);
  101. }
  102. else puts("No transformed string");
  103. }
  104. }
  105. return 0;
  106. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement