Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <stdio.h>
- #include <ctype.h>
- #include <string.h>
- //поиск подстрок
- void substr (int n, char str[][81], char str1[][81], int *n1, int num [])
- {int i; char *s,*s1; //s-на текущий символ. s1- на начало подстроки
- *n1=0; //число подстрок
- for(i=0;i<n;i++)
- {s=str[i];
- s1=s;
- while(*s)
- if (*s=='/*' || *s=='/' || *s=='*')
- {if (s!=s1)
- { //копирование подстроки
- num [*n1]=i; //запоминаем номер исходной cтроки
- strncpy(str1[*n1],s1,s-s1); //копируем часть строки
- str1[*n1][s-s1]='\0'; //добавляем нуль-символ в конец копии
- (*n1)++; //увеличиваем число подстрок
- }
- while(*s && (*s=='/*' || *s=='/' || *s=='*'))s++;
- s1=s; //начало новой подстроки
- }
- else s++;
- if (s!=s1)
- { //копирование подстроки, расположенной в конце строки
- num [*n1]=i;
- strncpy(str1[*n1],s1,s-s1);
- str1[*n1][s-s1]='\0';
- (*n1)++;
- }
- } //закрывающаяся скобка от цикла for
- }
- //поиск номера подстроки (вернет –1 если нет нужной подстроки)
- int nomer (char str1[][81], int n1) //возвращает номер подстроки
- {
- int max=0, maxi=-1, i;
- char *s; //указатель на текущий символ
- for(i=0;i<n1;i++)
- {
- s=str1[i];
- if(*s=='.') s++; //пропуск цифр
- if ( s>max ) //цифр больше всего
- max=s,maxi=i;
- s=0;
- }
- return(maxi);
- }
- //преобразование исходной строки
- int preobr(char *s) //возвращает признак преобразования
- {
- char *s1=s,*s2; int f=0;
- while(*s1&& *s1==' ')s1++; //поиск первого не пробела
- if (!*s1){ *s='\0'; f=1;} //все пробелы
- else
- {
- if (s!=s1) //есть пробелы в начале строки
- f=1;
- s2=s+strlen(s)-1;
- //s2-на символе перед '\0'
- while(*s2==' ') s2--;
- //s2-на последнем символе перед пробелом
- if (s2!=s+strlen(s)-1) f=1; //есть пробелы в конце строки
- strncpy(s,s1,s2-s1+1);
- *(s+(s2-s1)+1)='\0';
- }
- return f;
- }
- int main()
- {
- char str[10][81], str1[30][81];
- int i, i1, n=0, n1, num[30], f;
- //ввод строк до пустой или CTRL+Z
- puts("Input strings:\n");
- while (*gets(str[n]) && *str[n]&&n<10) n++;
- substr (n,str,str1,&n1,num);
- if (n1==0)
- puts("No substrings");
- else
- {
- puts("Substings");
- for(i=0;i<n1;i++)
- puts(str1[i]);
- i1= nomer (str1,n1);
- if (i1==-1)
- puts("No necessary substring");
- else
- {puts("Substring with the maximum number of points in the beginning");
- puts(str1[i1]);
- f= preobr(str[num[i1]]);
- if (f)
- {
- printf("%d\'th line of source array has been converted:\n",num[i1]);
- //преобразованная %d -я строка исходного массива
- puts(str[num[i1]]);
- }
- else puts("No transformed string");
- }
- }
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement