Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 18.03.2014, 00:10   #1
Bantom
 
Регистрация: 17.03.2014
Сообщений: 4
По умолчанию возвращение массива с функции

Задание: написать программу с функцией удаления из строки S подстроки,начиная с позиции n , длинной l. Надо описать эту функцию.
Сначала я написал программу без функции.Она работала. Далее я обернул блок с программой в функцию,но не знаю как сделать,что бы она выводила массив,который я смог бы вывести на экран.Я попробовал,что бы функция выводила указатель на первый елемент в массиве и при выводе отталкиваться от него.Но не работает.Подскажите в чём ошибка.уже голову сломал,не знаю в чём проблема.(где используется функция я выделил ******)
Код:
#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
#include <string.h>
#define ESC 27
char* delet(char st[100],int n, int l,int a,int k)
	{
	char tmp[100],*t;
	for(int i=0;i<k;i++)
		{
			tmp[i]=st[i];
		}
	for(int i=(k+l);i<=a;i++)
		{
			tmp[k]=st[i];
			k++;
		}
		t=&tmp[0];
	return t;
	}
int main(void)
{	
	char st[100],*tmp;
	int n,l,a,i,a1,a2,a3,k;
	do {
	a1=0;
	a2=0;
	a3=0;
	system("cls");
	printf("Vvedite stroky\n");
	gets(st);
	a=strlen(st);
	do{
	printf("Vvedite nomer elementa s kotorogo hotite nachat ydalenie\n");
	while (scanf("%d",&n)!=1)
				{
					system("cls");
					printf("Error.Vvodite tolko cifri\n");
					printf("Vvedite nomer elementa s kotorogo hotite nachat ydalenie\n");					
					fflush(stdin);
				}
		    if (n>a)
    		{
    			printf("V stroke menshe symvolov chem nomer kotoriy vi vveli\n");
    		}
    		else
			{
    			a3=1;
    	    }
      }while(a3!=1);
    do{
    printf("VVedite kolichestvo symbo;s kotorie vi hotite ydalit\n");
    while (scanf("%d",&l)!=1)
				{
					system("cls");
					printf("Error.Vvodite tolko cifri\n");
					printf("VVedite kolichestvo symbo;s kotorie vi hotite ydalit\n");					
					fflush(stdin);
				}
		    if ( (a-n) < l)
				{
    				printf("Simbols do konca stroki menshe chem vi vveli dlia udalenia\n");	
    			}
    			else
    			{
    				a2=1;
    			}
    }while(a2!=1);
//*****************************************************	
	k=n-1;
	tmp = delet(st,n,l,a,k);
	for(i=0;i<k;i++)
	{
		printf("%c",tmp[i]);
	}
//******************************************************
	printf("\n\n");
    printf("Esli va xotite viite nagmite Esc,esli net- lubyu klavishy\n");
	if (getch() == ESC)
      a1 = 1;
}while(a1 != 1);
return (0);
}

Последний раз редактировалось Stilet; 18.03.2014 в 09:10.
Bantom вне форума Ответить с цитированием
Старый 18.03.2014, 11:31   #2
R_G
Форумчанин
 
Регистрация: 22.11.2010
Сообщений: 114
По умолчанию

Код:
for(int i=0;i<k;i++)
		{
			tmp[i]=st[i];
		}
	for(int i=(k+l);i<=a;i++)
		{
			tmp[k]=st[i];
			k++;
		}
		t=&tmp[0];
что-то похоже у тебя тут ошибка..




___________
Код нужно оформлять по правилам:
тегом [CODE]..[/СODE]
(кнопочка на панели форматирования с решёточкой #)
Не забывайте об этом!

Модератор.

Последний раз редактировалось Serge_Bliznykov; 18.03.2014 в 13:09.
R_G вне форума Ответить с цитированием
Старый 18.03.2014, 22:36   #3
Bantom
 
Регистрация: 17.03.2014
Сообщений: 4
По умолчанию

Код:
#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
#include <string.h>
#define ESC 27
void delet(char st[100],int n, int l)
	{
	char tmp[100];
	int a,k,i;
	a=strlen(st);
	k=n-1;
	for(int i=0;i<k;i++)
		{
			tmp[i]=st[i];
		}
	for(int i=(k+l);i<=a;i++)
		{
			tmp[k]=st[i];
			k++;
		}
			for(i=0;i<k;i++)
	{
		printf("%c",tmp[i]);
	}
	}
int main(void)
{	
	char st[100];
	int n,l,a,i,a1,a2,a3,k;
	do {
	fflush(stdin);
	a1=0;
	a2=0;
	a3=0;
	system("cls");
	printf("Vvedite stroky\n");
	gets(st);
	a=strlen(st);
	do{
	printf("Vvedite nomer elementa s kotorogo hotite nachat ydalenie\n");
	while (scanf("%d",&n)!=1)
				{
					system("cls");
					printf("Error.Vvodite tolko cifri\n");
					printf("Vvedite nomer elementa s kotorogo hotite nachat ydalenie\n");					
					fflush(stdin);
				}
		    if (n>a)
    		{
    			printf("V stroke menshe symvolov chem nomer kotoriy vi vveli\n");
    		}
    		else
			{
    			a3=1;
    	    }
      }while(a3!=1);
    do{
    printf("VVedite kolichestvo symbols kotorie vi hotite ydalit\n");
    while (scanf("%d",&l)!=1)
				{
					system("cls");
					printf("Error.Vvodite tolko cifri\n");
					printf("VVedite kolichestvo symbo;s kotorie vi hotite ydalit\n");					
					fflush(stdin);
				}
		    if ( (a-n) < l)
				{
    				printf("Simbols do konca stroki menshe chem vi vveli dlia udalenia\n");	
    			}
    			else
    			{
    				a2=1;
    			}
    }while(a2!=1);
	delet(st,n,l);
	printf("\n\n");
    printf("Esli vi xotite viite nagmite Esc,esli net- lubyu klavishy\n");
	if (getch() == ESC)
      a1 = 1;
}while(a1 != 1);
return (0);
}
Вот так правильно.в том коде ошибки нет.уже додумался как сделать



________
Код нужно оформлять по правилам:
тегом [CODE]..[/СODE]
(это кнопочка на панели форматирования с решёточкой #)
Не забывайте об этом!

Модератор.

Последний раз редактировалось Serge_Bliznykov; 18.03.2014 в 22:56.
Bantom вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
возвращение функции значения TStringSream Lokos Общие вопросы Delphi 6 24.11.2010 12:42
Возвращение двухмерного массива из функции Exeil Общие вопросы C/C++ 11 24.10.2010 12:41
Возвращение объекта из функции класса atenon Общие вопросы C/C++ 9 19.05.2010 03:24
Возвращение функцией массива GonZaleZ Общие вопросы C/C++ 7 21.09.2009 13:56
Возвращение массива символов char ActioNs Общие вопросы C/C++ 3 10.01.2009 02:33