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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 30.05.2009, 09:08   #1
Slicker
Пользователь
 
Регистрация: 25.08.2008
Сообщений: 51
По умолчанию поменять местами слова в предложении (C++)

вобщем нужно написать программу, которая считывает с файла текст и меняет в каждом предложении первое и последнее слово местами.

Я написал программку которая считывает только одну строку, и меняет местами слова. Не получается сделать для многострочного текста. (Как я понимаю нужен посимвольное считывание, но вот рабочую программку сделать не выходит.)

Вот то что есть:

Код:
#include "stdafx.h"
#include <malloc.h>
#include <string.h>
#include <search.h>
#include <conio.h>
#include <windows.h>

#define STRLIMIT 100

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 _tmain(int argc, _TCHAR* argv[]){
// объявляем переменные:
        char stroka[STRLIMIT]="", buf[STRLIMIT]="", buf2[STRLIMIT]="", buf3[STRLIMIT]="", newstroka[STRLIMIT]=""; 
						
		char str[STRLIMIT]="Ich habe keine Lust."; // вводим то что будем изменять

  FILE *f = fopen("C:\\idzcpp\\idz3.txt", "w");        // открываем файл на запись
            fputs(str,f);      
        fclose(f);


        f = fopen("C:\\idzcpp\\idz3.txt", "r");        // открываем файл на чтение
            fgets(stroka, STRLIMIT, f);        // чтение строки
        fclose(f);

    int length=(int)strlen(stroka);    

//----------------------------------------------------------------
// Делаю замену:
//----------------------------------------------------------------

	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[strlen(buf)]='\0';		// дописываем нули окончания(на всякий случай)
	buf2[strlen(buf2)]='\0';
	buf3[strlen(buf3)]='\0';

	printf("%s:\n%s\n\n", "Bilo vvedeno",stroka); // выводим то что у нас имелось
sprintf(newstroka,"%s%s%s",buf3,buf2,buf);  // соединяем все в одну строку
printf("%s:\n%s","Polu4ilos",newstroka); // выводим то что получилось

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


  f = fopen("C:\\idzcpp\\idz3.txt", "w");        // открываем файл на запись
            fputs(newstroka,f);      //  записываем в файл новую троку
        fclose(f);

		_getch();
    return 0;
    
}
Slicker вне форума Ответить с цитированием
Старый 30.05.2009, 17:25   #2
Slicker
Пользователь
 
Регистрация: 25.08.2008
Сообщений: 51
По умолчанию

эм.. никто незнает?
Slicker вне форума Ответить с цитированием
Старый 30.05.2009, 17:49   #3
amdbodia
Пользователь
 
Аватар для amdbodia
 
Регистрация: 13.05.2009
Сообщений: 71
По умолчанию

Как вариант создать массив строк.

Проще будет через ifstream.
Примерно такая функция считывания из файла:
Код:
int n=0;	
ifstream fin ("file.txt");
	while(!fin.eof())
                {
		fin>>stroka[n];
                n++;
                }
amdbodia вне форума Ответить с цитированием
Старый 30.05.2009, 17:57   #4
Slicker
Пользователь
 
Регистрация: 25.08.2008
Сообщений: 51
По умолчанию

Ну мне кажется лучше сделать что-то типа:
Код:
while(!feof(f)){
bufer[i] = fgetc(f);
i++;
}
Т.е. посимвольное считывание.. но не получается это сделать.. да и отделить предложения друг от друга не получается
Slicker вне форума Ответить с цитированием
Ответ


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

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

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


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