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

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

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

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

Закрытая тема
Ваша тема закрыта, почему это могло произойти? Возможно,
Нет наработок или кода, если нужно готовое решение - создайте тему в разделе Фриланс и оплатите работу.
Название темы включает слова - "Помогите", "Нужна помощь", "Срочно", "Пожалуйста".
Название темы слишком короткое или не отражает сути вашего вопроса.
Тема исчерпала себя, помните, один вопрос - одна тема
Прочитайте правила и заново правильно создайте тему.
 
Опции темы Поиск в этой теме
Старый 03.04.2009, 19:18   #1
MAKEDON
The First Person!
Форумчанин
 
Аватар для MAKEDON
 
Регистрация: 07.08.2007
Сообщений: 228
По умолчанию Возожно-ли так?

Дана задача, нужно из введенного строкового массива удалить все после последней точки. Вот код. Но проблема с удалением.

Код:
#include <stdio.h>

int tochka(char *str);
void mas(char *str,int i);

int main(){
	int i=0,t;
	char a[255];
	gets(a);
	while(a[i++]);
	i-=1;
	t=tochka(a);
	i=i-t;
	mas(a,i);
	return 0;
}

int tochka(char *str){
	int i=0,j,t=0;
	while(str[i++]);
	i-=1;
	for(j=i;j>=0;j--){
		if(str[j]!='.'){
			t++;
		}else{
			return t;
		}
	}
	return t;
}

/*Вот можно сделать так как в этой части кода?*/
void mas(char *str,int i){
	int j;
	char b[i-1];
	for(j=0;j<i;j++){
		b[j]=str[j];
	}
	puts(b);
	return;
}
Программа обычно делает то что вы ей сказали сделать, а не то что бы вы хотели, чтобы она сделала.

Последний раз редактировалось MAKEDON; 03.04.2009 в 19:23.
MAKEDON вне форума
Старый 03.04.2009, 19:37   #2
Sazary
В тени
Старожил
 
Аватар для Sazary
 
Регистрация: 19.12.2008
Сообщений: 5,788
По умолчанию

Ну я бы не назвал это удалением. Здесь ведь просто создается массив меньшего размера и он же и выводится.
Я бы как-нибудь так написал:
Код:
#include <stdio.h>
#include <stdlib.h>

char* mas(char *s)  // принимаем указатель на строку
{
 char *tmp;
 int len=0;
 while(s[len++]!='.');  // считаем, сколько символов до точки
 len--;
 tmp = (char*)malloc(sizeof(char)*len); // выделяем память
 for(int i=0;i<len;i++)
  tmp[i] = s[i];  // копируем из исходной в новую
 delete[] s;  // удаляем исходную
 return tmp;  // и возвращаем указатель на новую
}

int main()
{
char *a; // это будет исходная строка
a = (char*)malloc(sizeof(char)*255); // выделяем память под нее (255 символов)
gets(a);  // вводим строку

a = mas(a);  // вызываем функцию и получаем указатель на новую строку
puts(a);  // выводим новую строку

getchar();
return 0;
}
Вполне очевидно, чтобы что-то понять, необходимо книги читать.
Не нужно плодить бессмысленных тем. Вас Поиск избавит от многих проблем.

___________________________________ ___________________________________ _______
[=Правила форума=]_____[Поиск]_____[Литература по С++]____[Литература. Паскаль]
Sazary вне форума
Старый 03.04.2009, 19:52   #3
pu4koff
Старожил
 
Аватар для pu4koff
 
Регистрация: 22.05.2007
Сообщений: 9,065
По умолчанию

если t - это индект символа "точка", то в строке символом t+1 ставим '\0' и усё. Память это не освободит, но дальше точки ничего не выведется
pu4koff вне форума
Старый 03.04.2009, 20:04   #4
MAKEDON
The First Person!
Форумчанин
 
Аватар для MAKEDON
 
Регистрация: 07.08.2007
Сообщений: 228
По умолчанию

2pu4koff

Во! Вот это мне и нужно. Огромное пасибо! Вот как выглядит рабочий код! Точку к слову тоже надо удалять! Ну это мелочи! Еще раз Пасибо!

Код:
#include <stdio.h>

int tochka(char *str);

int main(){
	int i=0,t;
	char a[255];
	gets(a);
	while(a[i++]);	
	i--;
	t=i-tochka(a);
	a[t]='\0';
	puts(a);
	return 0;
}

int tochka(char *str){
	int i=0,j,t=0;
		while(str[i++]);
		i-=1;
		for(j=i;j>=0;j--){
			if(str[j]!='.'){
				t++;
			}else{
				return t;
			}
		}
	return t;

}
Программа обычно делает то что вы ей сказали сделать, а не то что бы вы хотели, чтобы она сделала.
MAKEDON вне форума
Закрытая тема


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Что не так? Viento Microsoft Office Excel 3 30.01.2009 14:38
Не пойму чо так Cricket2007 Помощь студентам 5 15.05.2008 01:17
Почему так? Сильванович Михаил Общие вопросы C/C++ 2 03.07.2007 11:57
Обьясните почему так... malevich Общие вопросы Delphi 5 10.02.2007 17:29
Что-то не так Radiofuck Помощь студентам 2 16.01.2007 22:06