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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 10.06.2010, 18:24   #1
sanaes
 
Регистрация: 06.06.2010
Сообщений: 6
По умолчанию Строка возвращается без последнего символа

В задаче строки читается из текстового файла и потом изменённые возвращаются в другой файл. К примеру "Имя Отчетство Фамилия" записывается в новый файл в виде "Фамилия И.О.". Проблема в том что последняя строка возвращается в виде "Фамили И.О."

Код выглядит так:
Код:
Исходный код:
while (!feof(in))
   {
	fgets(str,100,in);       //Наибольшая длина строки 100, читается из in
	str=new_str (str);
	fputs(str, out);         // записывается в out
   }
Код функции new_str:
char *new_str (char *str)
{
	int i;
	char *s=new char [strlen(str)];
	int k=0;
	for (i=strlen(str);i>1;i--)
		if (str[i]==' ')
			break;
	for (i+=1;i<strlen(str)-1;i++, k++)
		s[k]=str[i];
	s[k++]=' ';
	s[k++]=str[0];
	s[k++]='.';
	i=0;
	while (str[i]!=' ')
	{
		i++;
	}
	s[k++]=str[i+1];
	s[k++]='.';
	s[k++]='\0';
	return s;
}
sanaes вне форума Ответить с цитированием
Старый 10.06.2010, 18:42   #2
ozo
Форумчанин
 
Аватар для ozo
 
Регистрация: 26.04.2010
Сообщений: 328
По умолчанию

Код:
	for (i+=1;i<strlen(str)-1;i++, k++)
		s[k]=str[i];
}
на
Код:
for( i += 1; str[i]; ++i, ++k )
   s[k] = str[i];

ну или просто -1 убрать.
Используй гугль, будь счастлив
hackme@yandex.ru
Блог об archlinux
ozo вне форума Ответить с цитированием
Старый 11.06.2010, 06:34   #3
sanaes
 
Регистрация: 06.06.2010
Сообщений: 6
По умолчанию

Цитата:
Сообщение от ozo Посмотреть сообщение
Код:
	for (i+=1;i<strlen(str)-1;i++, k++)
		s[k]=str[i];
}
на
Код:
for( i += 1; str[i]; ++i, ++k )
   s[k] = str[i];

ну или просто -1 убрать.
Не помогло. -1 нужна для того что бы отбросить символ "конца строки".
Поэтому если убрать -1 или использовать твой код, то будет передаваться символ "конца строки" и инициалы имен и отчества буду расположены строкой ниже
sanaes вне форума Ответить с цитированием
Старый 12.06.2010, 08:57   #4
sanaes
 
Регистрация: 06.06.2010
Сообщений: 6
По умолчанию

Не помогает, кроме того если я уберу -1, то будет передаваться символ конца строки, а мне это не надо
sanaes вне форума Ответить с цитированием
Старый 12.06.2010, 14:14   #5
sanaes
 
Регистрация: 06.06.2010
Сообщений: 6
По умолчанию

Не помогает, а если убрать -1, то будет передаваться символ конца строки
sanaes вне форума Ответить с цитированием
Старый 12.06.2010, 15:07   #6
Ozerich
Студент 1 курса
Форумчанин Подтвердите свой е-майл
 
Аватар для Ozerich
 
Регистрация: 27.06.2008
Сообщений: 959
По умолчанию

Код:
#include <cstdio>
#include <string>
using namespace std;

char *new_str (char *str)
{
	int i;
	char *s=new char [strlen(str)];
	int k=0;
	for (i=strlen(str);i>1;i--)
		if (str[i]==' ')
			break;
	for( i += 1; str[i] && str[i] != 10; ++i, ++k )
		s[k] = str[i];
	s[k++]=' ';
	s[k++]=str[0];
	s[k++]='.';
	i=0;
	while (str[i]!=' ')
		i++;
	s[k++]=str[i+1];
	s[k++]='.';
	s[k++]='\0';
	return s;
}

int main()
{
	FILE *in = fopen("input.txt", "r");
	FILE *out = fopen("output.txt", "w");
	char *str = new char[100];
	while (!feof(in))
	{
		fgets(str, 100, in);       //Наибольшая длина строки 100, читается из in
		if(strlen(str) == 0)
			break;
		str = new_str (str);
		fputs(str, out);         // записывается в out
	}
	fclose(in);
	fclose(out);
	return 0;
}
C++(STL, QT, WinInet) / DHTML(CSS) / JavaScript / PHP Developer
Ozerich вне форума Ответить с цитированием
Старый 12.06.2010, 15:22   #7
sanaes
 
Регистрация: 06.06.2010
Сообщений: 6
По умолчанию

Спасибо всё работает
sanaes вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Дан символ C и строка S. Удвоить каждое вхождение символа C в строку S. MrJohanson Помощь студентам 1 10.03.2010 09:51
C++ чтение из файла(строка 73 символа) neji_zp Помощь студентам 2 22.02.2010 23:51
Строка и замена символа в ней(поправить) Mariya2009 Общие вопросы C/C++ 8 05.02.2010 00:32
обновление в блоге - Рассылка возвращается! Pblog Обсуждение статей 0 03.08.2007 21:56