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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 05.11.2017, 19:16   #1
OlgaB
 
Регистрация: 28.10.2017
Сообщений: 5
Сообщение Потоки С++

Всем привет , не могу понять как сделать так чтобы : если в тексте была строка в которой записано например 90 символов, но мне надо чтобы он считывал только 80 из них в строке в 10 строках , далее я делаю перестановку букв в слове ,вопрос так же в том что он должен мне вывести в конечный файл? только матрицу 10х80 он должен изменить, а все что за ней не тронуть ?
Может кто нормально объяснить как это работает или это делается как то с помощью режима/мода делается ?


Код:
#include "stdafx.h"
#include <iostream>
#include <fstream>
#include <cstring>
#include <cctype>
#include <string.h>

using namespace std;

int main()
{
	setlocale(LC_CTYPE, "rus");

	char str[10][80];
	char w1, w2;					//w1 - первая буква слова, w2 - последняя буква слова
	int i, j, k = 0, ln, lk, s1, s2, r;		//ln - индекс первой буквы слова , lk - индекс последней буквы слова
	ifstream f("text.txt");

	while (!f.eof()) 
	{				
		f.getline(str[k], 80);
		k++;
	}

	for (i = 0; i < k; i++) {
		cout << str[i] << endl;
	}

	for (i = 0; i < k; i++) {
		ln = 0;						
		lk = 0;
		for (j = 0; j < strlen(str[i]); j++) {
			if (j == 0) w1 = str[i][j];

			if (str[i][j + 1] == ' ' || j == strlen(str[i]) - 1) {		//если этот символ - последняя буква слова
				s1 = 0;							//s1 - счетчик для символов, которые равны первой букве 
				s2 = 0;							//s2 - счетчик для симв, равных последней букве
				lk = j;							//индекс последней буквы слова = текущему символу
				w2 = str[i][j];					//текущая буква будет последней буквой в слове

				for (r = ln; r < lk + 1; r++) {		
					if (str[i][r] == w1) {
						s1++;
					}
					if (str[i][r] == w2) s2++;
				}
				
				if (s1 > 1) {
					for (r = ln; r < lk; r++)
						str[i][r] = str[i][r + 1];
					str[i][lk] = w1;
				}
				if (s2 == 1) {
					if (s1 > 1) {
						for (r = lk - 1; r > ln; r--)
							str[i][r] = str[i][r - 1];
						str[i][ln] = w2;
					}
					else {
						for (r = lk; r > ln; r--)
							str[i][r] = str[i][r - 1];
						str[i][ln] = w2;
					}

				}
				//текущий символ (j) это последняя буква текущего слова , т.е. след слово начинается с j + 2
				ln = j + 2;
				w1 = str[i][j + 2];
			}
		}
	}

	cout << "\n Текст после изменения \n";
	for (i = 0; i < k; i++)
	{
		for (j = 0; j < strlen(str[i]); j++)
		{
			cout << str[i][j];
		}
		cout << endl;
	}

	char name[30];
	cout << "\n Введите имя файла: ";
	cin >> name;
	strcat_s(name, ".txt");
	ofstream fout;
	fout.open(name);
	for (i = 0; i < k; i++) {
		fout << str[i];
		fout << "\n";
	}
	fout.close();

	system("pause");
}

Заранее всем спасибо.
OlgaB вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Потоки c# Анастасия666 C# (си шарп) 0 13.02.2014 15:25
Потоки. Закрываются все потоки при ошибке в одном. Son Общие вопросы Delphi 11 01.11.2013 09:32
потоки Cpluser C# (си шарп) 1 28.10.2012 17:00
потоки пауэрлифтинг Общие вопросы Delphi 5 23.05.2010 14:19