Форум программистов, компьютерный форум CyberForum.ru

Для каждой строки файла переставить первое и среднее слово - C++

Восстановить пароль Регистрация
 
mary1010
0 / 0 / 0
Регистрация: 17.09.2012
Сообщений: 32
22.12.2012, 02:02     Для каждой строки файла переставить первое и среднее слово #1
Помогите пожалуйста!!!
не знаю с чего начать...

необходимо для каждой строки файла переставить первое и среднее слово. Результат записать в файл.

Добавлено через 1 час 22 минуты
не понятно, как в строке получить среднее слово....те , я так понимаю, нужно как-то принять пробел за разделитель и подсчитать все слова в строке, их сумму разделить на количество и получить среднее слово? а если это значение окажется не целым?и как поменять 1 и среднее слова???
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
22.12.2012, 02:02     Для каждой строки файла переставить первое и среднее слово
Посмотрите здесь:

C++ поменять местами первое и второе слово в каждой строке
C++ В двумерной матрице найти минимальные элементы каждой строки и переставить на первое место
Даны два слова.Верно ли,что первое слово начинается на ту же букву,на которую заканчивается второе слово (работа с символами строки) C++
C++ Как считать первое слово из каждой строки?
C++ Для каждой строки файла удалить короткое слово
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
svkpro
 Аватар для svkpro
8 / 8 / 0
Регистрация: 07.12.2012
Сообщений: 143
22.12.2012, 02:33     Для каждой строки файла переставить первое и среднее слово #2
начните с этого))):
Код
#include "stdafx.h"
#include <iostream>
#include <fstream>
#define  size_str 200

using namespace std;
int c=1;
int main()
{
locale::global(locale("Rus"));
FILE*cfPtr;
	fopen("D:\\vhod.txt","r");
	if((cfPtr=fopen("vhod.txt","r"))==NULL){//здесь я думаю все понятно 
		cout<<"файл не найден!";
	}
	else
		while(true){
			char strz[100];//заводим строку
				fgets(strz,size_str,cfPtr);//считываем в нее строку из файла
			char *p1,*p2,*p3,*p4,*p5;//заводим указатели
				if(feof(cfPtr))break;//приверяем конец файла или нет
				p1=strtok(strz,";");//берем подстроку до разделителя ";"
				p2=strtok(NULL, ";");//ставим позицию ноль и читаем до разделителя
				p3=strtok(NULL, ";");//разделитель может быть и пробелом " "
				p4=strtok(NULL, ";");
				p5=strtok(NULL, ";");
			char strz2[100];
				 strcpy(strz2,p3);//здесь просто указатели *p1 и *p3 меняем местами
				 strcat(strz2,";");
				 strcat(strz2,p2);
				 strcat(strz2,";");
				 strcat(strz2,p1);
				 strcat(strz2,";");
				 strcat(strz2,p4);
				 strcat(strz2,";");
				 strcat(strz2,p5);
				 strcat(strz2,";");
FILE* fz;
	fz=fopen("D:\\vyhod.txt","a+");//пишем в файл
	fputs(strz2, fz);
	fputc('\n',fz);
	fclose(fz);
	cout<<"строка "<<c<<" добавлена в файл!\n";
	c++;
	}
system("pause");//останавливам программу для просмотра результатов работы.
return 0;
}
MrGluck
Ворчун
Эксперт С++
 Аватар для MrGluck
4920 / 2663 / 243
Регистрация: 29.11.2010
Сообщений: 7,409
22.12.2012, 02:39     Для каждой строки файла переставить первое и среднее слово #3
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
#include <fstream>
#include <algorithm>
#include <iterator>
#include <vector>
#include <sstream>
 
 
int main()
{
    std::ifstream ifs("text.txt");
    std::ofstream o("result.txt");
    if (!ifs) return 1;
    std::string str;
    while (!ifs.eof() && std::getline(ifs, str))
    {
        std::istringstream ist(str);
        std::vector<std::string> v;
        std::copy(std::istream_iterator<std::string>(ist),
                  std::istream_iterator<std::string>(), std::back_inserter(v));
        std::swap(*v.begin(), *(v.begin() + v.size() / 2));
        std::copy(v.begin(), v.end(), std::ostream_iterator<std::string> (o, " "));
        o << std::endl;
    }
}
mary1010
0 / 0 / 0
Регистрация: 17.09.2012
Сообщений: 32
22.12.2012, 18:02  [ТС]     Для каждой строки файла переставить первое и среднее слово #4
Цитата Сообщение от svkpro Посмотреть сообщение
начните с этого))):
а почему проверяем строки?и меняем местами строки...

Добавлено через 10 минут
и почему-то файл не найден, хотя путь верный...
MrGluck
Ворчун
Эксперт С++
 Аватар для MrGluck
4920 / 2663 / 243
Регистрация: 29.11.2010
Сообщений: 7,409
22.12.2012, 18:07     Для каждой строки файла переставить первое и среднее слово #5
mary1010, путь к файлам лучше задавать не абсолютный, а относительный, как у меня. И в таком случае файл должен находиться в той же папке, что и бинарник.
svkpro
 Аватар для svkpro
8 / 8 / 0
Регистрация: 07.12.2012
Сообщений: 143
22.12.2012, 20:07     Для каждой строки файла переставить первое и среднее слово #6
код рабочий это 100% просто файл с которого читает должен либо лежать в папке программы, либо надо объявить полный путь)

Добавлено через 3 минуты
Цитата Сообщение от mary1010 Посмотреть сообщение
а почему проверяем строки?и меняем местами строки...
мы меняем не строки а подстроки(слова) на которые разбивается строка)
mary1010
0 / 0 / 0
Регистрация: 17.09.2012
Сообщений: 32
22.12.2012, 23:05  [ТС]     Для каждой строки файла переставить первое и среднее слово #7
а как сделать так, чтобы пользователь вводил имя файла с клавиатуры? я знаю такой способ:
C++
1
2
3
4
5
6
printf("enter file name");
scanf("%s"fnin);
printf("enter final file name");
scanf("%s"fnout);
fin=fopen(fnin; "rt");
fout=fopen(fnout; "wt");
MrGluck
Ворчун
Эксперт С++
 Аватар для MrGluck
4920 / 2663 / 243
Регистрация: 29.11.2010
Сообщений: 7,409
22.12.2012, 23:11     Для каждой строки файла переставить первое и среднее слово #8
C++
1
2
3
std::string name;
std::cin >> name;
std::ifstream ifs(name);
mary1010
0 / 0 / 0
Регистрация: 17.09.2012
Сообщений: 32
22.12.2012, 23:27  [ТС]     Для каждой строки файла переставить первое и среднее слово #9
[C++ Error] Unit1.cpp(13): E2285 Could not find a match for '_STL::ifstream::basic_ifstream(_STL::string)'

такая ошибка на строке
C++
1
std::ifstream ifs(name);
MrGluck
Ворчун
Эксперт С++
 Аватар для MrGluck
4920 / 2663 / 243
Регистрация: 29.11.2010
Сообщений: 7,409
22.12.2012, 23:28     Для каждой строки файла переставить первое и среднее слово #10
mary1010, не знаю в чем проблема, попробуйте
C++
1
std::ifstream ifs(name.c_str());
mary1010
0 / 0 / 0
Регистрация: 17.09.2012
Сообщений: 32
23.12.2012, 00:47  [ТС]     Для каждой строки файла переставить первое и среднее слово #11
так в итоге получилось)но при вводе имени файла (ПРАВИЛЬНОГО!), все равно получаю:wrong file name!....почему??

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
#include <fstream>
#include <algorithm>
#include <iterator>
#include <vector>
#include <sstream>
#include <vcl.h>
#include <iostream>
#include <conio.h>
using namespace std;
int main()
{
 cout << "Enter a file name:"  ;
//entering a file name using keyboard
std::string name;
std::cin >> name;
std::ifstream ifs(name.c_str());
if (! ifs)
        {  cout<<"wrong file name!";
           exit (1);  
        }
     else{
    std::ofstream o("result.txt");
    if (!ifs) return 1;
    std::string str;
    while (!ifs.eof() && std::getline(ifs, str))
    {
        std::istringstream ist(str);
        std::vector<std::string> v;
        std::copy(std::istream_iterator<std::string>(ist),
                  std::istream_iterator<std::string>(), std::back_inserter(v));
        std::swap(*v.begin(), *(v.begin() + v.size() / 2));
        std::copy(v.begin(), v.end(), std::ostream_iterator<std::string> (o, " "));
        o << std::endl;
    }  }
    system("pause");
    getch();
    }
svkpro
 Аватар для svkpro
8 / 8 / 0
Регистрация: 07.12.2012
Сообщений: 143
23.12.2012, 01:13     Для каждой строки файла переставить первое и среднее слово #12
Цитата Сообщение от mary1010 Посмотреть сообщение
а как сделать так, чтобы пользователь вводил имя файла с клавиатуры? я знаю такой способ:
C++
1
2
3
4
5
6
printf("enter file name");
scanf("%s"fnin);
printf("enter final file name");
scanf("%s"fnout);
fin=fopen(fnin; "rt");
fout=fopen(fnout; "wt");
а я знаю такой))
Код
while(true)//цикл будет работать пока пользователь не введет правильное имя
              //это удобно потому что пользователь может при вводе ошибиться нечаянно и чтобы не перегружать  программу - цикл))
			{
				cout<<"Введите имя файла:"<<endl;
				cin>>nf;//ввод имени файла
				if (_access(nf,0)!=-1) break;//есть ли файл.
				else(cout<<"Файл не найден!")<<endl;
				
			}					
				ifstream inpf (nf);
				cout<<inpf.rdbuf()<<endl;	
				cout<<endl;
				inpf.close();
но учтите файл лучше ложить в папку с программой ну или придется писать весь путь)))
mary1010
0 / 0 / 0
Регистрация: 17.09.2012
Сообщений: 32
23.12.2012, 01:34  [ТС]     Для каждой строки файла переставить первое и среднее слово #13
Цитата Сообщение от svkpro Посмотреть сообщение
а я знаю такой))

но учтите файл лучше ложить в папку с программой ну или придется писать весь путь)))
файл и так в этой папке...но все равно не открывается...это странно
svkpro
 Аватар для svkpro
8 / 8 / 0
Регистрация: 07.12.2012
Сообщений: 143
23.12.2012, 01:50     Для каждой строки файла переставить первое и среднее слово #14
Цитата Сообщение от mary1010 Посмотреть сообщение
файл и так в этой папке...но все равно не открывается...это странно
это кусок рабочего кода из моей старой курсовой)) он проверен 10000000000 раз)) скажите какой компилятор вы используете? и что он пишет вам в ответ?
mary1010
0 / 0 / 0
Регистрация: 17.09.2012
Сообщений: 32
23.12.2012, 02:27  [ТС]     Для каждой строки файла переставить первое и среднее слово #15
Цитата Сообщение от svkpro Посмотреть сообщение
это кусок рабочего кода из моей старой курсовой)) он проверен 10000000000 раз)) с
дело в том, что я не могу использовать ваш код в своей программе...у Вас и у меня использованы разные методы для работы с файлом...
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
23.12.2012, 18:50     Для каждой строки файла переставить первое и среднее слово
Еще ссылки по теме:

C++ Для каждой строки массива найдите среднее арифметическое положительных чётных чисел
C++ Определить, содержит ли последнее слово строки букву, с которой начинается первое слово
В каждой строке файла удалить среднее слово C++

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
MrGluck
Ворчун
Эксперт С++
 Аватар для MrGluck
4920 / 2663 / 243
Регистрация: 29.11.2010
Сообщений: 7,409
23.12.2012, 18:50     Для каждой строки файла переставить первое и среднее слово #16
mary1010, учтите, что имя файла нужно вводить вместе с форматом, например так: test.txt, а не test
Yandex
Объявления
23.12.2012, 18:50     Для каждой строки файла переставить первое и среднее слово
Ответ Создать тему
Опции темы

Текущее время: 21:04. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru