Технический форум
Вернуться   Технический форум > Программирование > Форум программистов > Помощь студентам


Ответ
 
Опции темы Опции просмотра
Старый 07.04.2017, 00:01   #1 (permalink)
andrew_ryaba
Новичок
 
Регистрация: 30.11.2013
Сообщений: 11
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
По умолчанию C++: Удалить из строки слова, начинающиеся с одинаковой буквы

Здравствуйте! Помогите, пожалуйста, с решением такой задачи: составить программу, которая удаляла бы из строки слова, начинающиеся с одинаковой буквы. Я попытался сделать, но проблема в том, что почти во всех случаях программа удаляет все слова, кроме последнего, даже если они начинаются на разные буквы.
Код:
// ConsoleApplication10.cpp: определяет точку входа для консольного приложения.
#include "stdafx.h"
#include <iostream> 
#include <fstream>
#include <iomanip> 
using namespace std;
void main()
{
	char s[100];
	int i = 0;
	bool del = false;
	ifstream F("C:\\labrab\\Input.txt");
	ofstream f("C:\\labrab\\Result.txt");
	while (!F.eof())
	{
		F >> s;
		
			for (int j = i + 1; s[j] != '\0'; j++)
			{
				if ((s[j] == ' ') && (s[j + 1] == s[i])) //удаляем проверяемое слово
				{
					del = true;
					j++;
					int k = j, n = j;
					while ((s[n] != '\0'))
					{
						for (k = j; (s[k] != '\0'); k++)
						{
							s[k] = s[k + 1];
						}
						n++;
					}
				}
			}
			if (del) //удаляем проверочное слово
			{
				int k = i + 1, n = i + 1;
				while ((s[n] != '\0'))
				{
					for (k = i; (s[k] != '\0'); k++)
					{
						s[k] = s[k + 1];
					}
					n++;
				}
				del = false;
			}
			for (; (s[i] != '\0'); i++);
			i++;
		}
	
		f << s << ' ';
	
	f.close();
	F.close();
}
andrew_ryaba вне форума   Ответить с цитированием

Старый 07.04.2017, 00:01
Helpmaster
Member
 
Аватар для Helpmaster
 
Регистрация: 08.03.2016
Сообщений: 0

Вам хорошо было бы ознакомиться со схожими обсуждениями на нашем форуме

Office. Вместо одной буквы печатаются по две буквы
Как сделать так, чтобы вводя первые буквы слова в "имя ящика", уже появлялось слово?

Старый 07.04.2017, 02:15   #2 (permalink)
Viewer
Banned
 
Регистрация: 06.03.2017
Сообщений: 788
Сказал(а) спасибо: 0
Поблагодарили 18 раз(а) в 4 сообщениях
Репутация: 5680
По умолчанию

сортировка по правилу distinct (уникальные).
Viewer вне форума   Ответить с цитированием
Старый 07.04.2017, 12:15   #3 (permalink)
Vladimir_S
Специалист
 
Регистрация: 27.08.2008
Адрес: Санкт-Петербург
Сообщений: 27,807
Сказал(а) спасибо: 340
Поблагодарили 583 раз(а) в 208 сообщениях
Репутация: 113184
По умолчанию

Цитата:
Сообщение от andrew_ryaba Посмотреть сообщение
Здравствуйте! Помогите, пожалуйста, с решением такой задачи: составить программу, которая удаляла бы из строки слова, начинающиеся с одинаковой буквы. Я попытался сделать, но проблема в том, что почти во всех случаях программа удаляет все слова, кроме последнего, даже если они начинаются на разные буквы.
К сожалению, СИ не владею, и тем более про distinct (уникальные) ничего не знаю, но могу сказать вот что.
Задачка из разряда ОЧЕНЬ заковыристых. Мне кажется, простым манипулированием переменными циклов решить её если и можно, то до крайности затруднительно. Проще сделать так: прогнать цикл, формирующий из строки массив отдельных слов (напр. W), затем написать блок, удаляющий "лишние" слова (пусть количество слов равно N; от i=1 до N-1 от j=i+1 до N если W[i][1]=W[j][1], то W[j] удалить, и если произошло хоть одно удаление, то и W[i] тоже удалить) и, наконец, из массива вновь сформировать строку.
Тоже, конечно, не подарок, но хоть прозрачно.
Vladimir_S вне форума   Ответить с цитированием
Ads

Яндекс

Member
 
Регистрация: 31.10.2006
Сообщений: 40200
Записей в дневнике: 0
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 55070
Ответ


Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Выкл.
HTML код Выкл.
Trackbacks are Вкл.
Pingbacks are Вкл.
Refbacks are Выкл.




Часовой пояс GMT +4, время: 12:33.

Powered by vBulletin® Version 6.2.5.
Copyright ©2000 - 2014, Jelsoft Enterprises Ltd.