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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 30.05.2009, 22:28   #11
Slicker
Пользователь
 
Регистрация: 25.08.2008
Сообщений: 51
По умолчанию

мм, суть не в том, слова не в правильном порядке меняет. т.е. последнее слово ставит на 1 место, первое слово на второе.. и дальше вообще непонятно откуда берется первое слово из первого предложения)
Slicker вне форума Ответить с цитированием
Старый 30.05.2009, 22:32   #12
Sazary
В тени
Старожил
 
Аватар для Sazary
 
Регистрация: 19.12.2008
Сообщений: 5,788
По умолчанию

Ну вот так значит сделайте:
читайте посимвольно до точки (думаю, вы уже поняли, как это делать).
После этого есть строка. Работаем с ней, меняем, что надо и пишем в выходной файл.
Дальше читаем в буфер, пока не встретим букву. Эти символы просто заносим в выходной файл.
И дальше следующая итерация цикла.
Вполне очевидно, чтобы что-то понять, необходимо книги читать.
Не нужно плодить бессмысленных тем. Вас Поиск избавит от многих проблем.

___________________________________ ___________________________________ _______
[=Правила форума=]_____[Поиск]_____[Литература по С++]____[Литература. Паскаль]
Sazary вне форума Ответить с цитированием
Старый 01.06.2009, 22:49   #13
Slicker
Пользователь
 
Регистрация: 25.08.2008
Сообщений: 51
По умолчанию

Все подправил, исправил, чего не хватало дописал
Вобщем может быть кому пригодится, или просто интересно посмотреть, вот код с подробными коментариями:
Код:
#include "stdafx.h"
#include <malloc.h>
#include <string.h>
#include <search.h>
#include <conio.h>
#include <windows.h>
#include <stdio.h>

#define STRLIMIT 200

unsigned char zag(int c) {  // преобразование в заглавные буквы
	if (c>='a' && c <= 'z') return (c-'g'+'G');
	if (c>='а' && c <= 'я') return (c-'г'+'Г');
	return c;
}
unsigned char mal(int c) {  // преобразуем в маленькие буквы
	if (c>='A' && c <= 'Z') return (c-'G'+'g');
	if (c>='А' && c <= 'Я') return (c-'Г'+'г');
	return c;
}

int slovo1(char stroka[], int length){  //нахожу конец первого слова
    int i=0;
		 for (i=0;i<length;i++) 
             if (stroka[i]==' ') {break;}
    return i;
}

int slovo2(char stroka[], int length){ //нахожу начало последнего слова
	int i=0;
		for (i=length; i>0; i--) 
			if (stroka[i]==' '){break;}
	return i;
}


int main(){
// объявляем переменные:
char stroka[STRLIMIT]="", buf[STRLIMIT]="", buf2[STRLIMIT]="", buf3[STRLIMIT]="", newstroka[STRLIMIT]=""; 
						
FILE *f,*fout;
f = fopen("C:/text1.txt", "r");        // открываем файл на чтение
fout = fopen("C:/text2.txt","w");  // и на запись
char c;  // будет считываемым символом
int length; // сюда запишем длину строки

while (!feof(f))  // пускаем цикл до конца файла
{
	length = 0; //обнуляем, чтобы на след. предложении не отразилось
 do
 {

  c = fgetc(f); //считываем символ

  if(c!='\n') {stroka[length++] = c;}

 } 
  while(c!='.'&&length<STRLIMIT&&!feof(f)); 
stroka[length]='\0'; // ставим в конец символ конца строки
//----------------------------------------------------------------
// Делаю замену:
//----------------------------------------------------------------
	for(int i=0; i<(slovo1(stroka,length)); i++) // записываем первое слово
		buf[i] = stroka[i];

int k=0;
int j=0;

int s2=slovo2(stroka,length)+1; // чтобы не потерять последний пробел

	for(int i=(slovo1(stroka,length)); i<s2; i++){ //записываем то что между первым и последним словами
		buf2[k]=stroka[i];
		k++;
	}

	if(stroka[length-1]=='.') length--; // проверка стоит ли вконце точка

	for(int i=s2; i<length; i++){ //записываем последнее слово
		buf3[j]=stroka[i];
		j++;
	}
	if(stroka[length]=='.') buf[strlen(buf)]='.'; // если была точка добавляем ее в конец предложения..
	
	buf[0]=mal(buf[0]);
	buf3[0]=zag(buf3[0]);

	buf[strlen(buf)]='\0';		// дописываем нули окончания(на всякий случай)
	buf2[strlen(buf2)]='\0';
	buf3[strlen(buf3)]='\0';

sprintf(newstroka,"%s%s%s",buf3,buf2,buf);  // соединяем все в одну строку

//----------------------------------------------------------------
// Замена окончена.
//----------------------------------------------------------------

fprintf(fout,"%s\n",newstroka); // запись в файл..

	for(int m=0; m<STRLIMIT; m++){ // отчистка буфера..
		buf[m]=NULL;
		buf2[m]=NULL;
		buf3[m]=NULL;
		stroka[m]=NULL;
		newstroka[m]=NULL;
	}
c=fgetc(f);	
}
fclose(f); // закрываем файлы
fclose(fout);

return 0;  
}
Slicker вне форума Ответить с цитированием
Старый 09.03.2011, 21:05   #14
Nike0
 
Регистрация: 26.10.2009
Сообщений: 6
По умолчанию

подниму тему: а можно ли сделать эту прогу с помощью дружественных функций, и чтобы здесь менялись первое и последнее, второе и предпоследнее и т.д. предложения?
Nike0 вне форума Ответить с цитированием
Старый 09.03.2011, 22:40   #15
Obey-Kun
Линуксоид
Участник клуба
 
Аватар для Obey-Kun
 
Регистрация: 31.07.2009
Сообщений: 1,403
По умолчанию

По изначальному вопросу. Так ты Си учишь или С++? В С++ для работы с таким лучше применять ifstream и vector<string>.
Я схожу с ума или это глючит реальность?
Jabber ID: obey@obey.su
Obey-Kun вне форума Ответить с цитированием
Старый 10.03.2011, 10:17   #16
Nike0
 
Регистрация: 26.10.2009
Сообщений: 6
По умолчанию

С++, но вектор мы не проходили, можно ли подсказать, что именно использовать для решения этой задачи?
Nike0 вне форума Ответить с цитированием
Ответ


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

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
поменять местами слова в предложении (C++) Slicker Помощь студентам 3 30.05.2009 17:57
Найти все слова в предложении PbIska Помощь студентам 5 12.05.2009 21:23
поменять местами научите Паскаль, Turbo Pascal, PascalABC.NET 13 08.01.2009 13:43
как поменять местами слова в файле? r-tem Общие вопросы C/C++ 6 01.12.2008 22:17
В введенном предложении удалить все повторяющиеся слова Алена Помощь студентам 5 21.11.2007 14:12