/*************************************************/
/******** Файл LAB1.C **************************/
#include <stdio.h>
#define N 80
/**************************************************/
/* Функция выделения подстроки (массивы) */
/*************************************************/
int substr_mas(char src[N],char dest[N],int num,int len){
int i, j;
/* проверка случая 4 */
if ( (num<0)||(len<=0) ) {
dest[0]=0; return 0;
}
/* выход на num-ый символ */
for (i=0; i<=num; i++)
/* проверка случая 3 */
if ( src[i]=='\0') {
dest[0]=0; return 0;
}
/* перезапись символов */
for (i--, j=0; j<len; j++, i++) {
dest[j]=src[i];
/* проверка случая 2 */
if ( dest[j]=='\0') return 1;
}
/* запись признака конца в выходную строку */
dest[j]='\0';
return 1;
}
/*************************************************/
/* Функция выделение подстроки */
/* (адресная арифметика) */
/************************************************/
int substr_ptr(char *src, char *dest, int num, int len) {
/* проверка случая 4 */
if ( (num<0)||(len<=0) ) return dest[0]=0;
/* выход на num-ый символ или на конец строки */
while ( num-- && *src++ );
/* проверка случая 3 */
if ( !num ) return dest[0]=0;
/* перезапись символов */
while ( len-- && *src ) *dest++=*src++;
/* запись признака конца в выходную строку */
*dest=0;
return 1;
}
/*************************************************/
main()
{
char ss[N], dd[N];
int n, l;
clrscr();
printf("Вводите строку:\n");
gets(ss);
printf("начало=");
scanf("%d",&n);
printf("длина=");
scanf("%d",&l);
printf("Массивы:\n");
if (substr_mas(ss,dd,n,l)) printf(">>%s<<\n>>%s<<\n",ss,dd);
else printf("Ошибка! >>%s<<\n",dd);
dd[0]='\0';
printf("Адресная арифметика:\n");
if (substr_ptr(ss,dd,n,l)) printf(">>%s<<\n>>%s<<\n",ss,dd);
else printf("Ошибка! >>%s<<\n",dd);
getch();
}
Лабораторная работа №2.
Представление в памяти массивов и матриц