• Добро пожаловать на компьютерный форум Tehnari.ru. Здесь разбираемся с проблемами ПК и ноутбуков: Windows, драйверы, «железо», сборка и апгрейд, софт и безопасность. Форум работает много лет, сейчас он переехал на новый движок, но старые темы и аккаунты мы постарались сохранить максимально аккуратно.

    Форум не связан с магазинами и сервисами – мы ничего не продаём и не даём «рекламу под видом совета». Отвечают обычные участники и модераторы, которые следят за порядком и качеством подсказок.

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

    Не знаете, с чего начать? Создайте тему с описанием проблемы – подскажем и при необходимости перенесём её в подходящий раздел.
    Задать вопрос Новые сообщения Как правильно спросить
    Если пришли по старой ссылке со старого Tehnari.ru – вы на нужном месте, просто продолжайте обсуждение.

C++: Удалить из строки слова, начинающиеся с одинаковой буквы

andrew_ryaba

Ученик
Регистрация
30 Ноя 2013
Сообщения
11
Реакции
0
Баллы
0
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();
}
 
сортировка по правилу distinct (уникальные).
 
Здравствуйте! Помогите, пожалуйста, с решением такой задачи: составить программу, которая удаляла бы из строки слова, начинающиеся с одинаковой буквы. Я попытался сделать, но проблема в том, что почти во всех случаях программа удаляет все слова, кроме последнего, даже если они начинаются на разные буквы.
К сожалению, СИ не владею, и тем более про distinct (уникальные) ничего не знаю, но могу сказать вот что.
Задачка из разряда ОЧЕНЬ заковыристых. Мне кажется, простым манипулированием переменными циклов решить её если и можно, то до крайности затруднительно. Проще сделать так: прогнать цикл, формирующий из строки массив отдельных слов (напр. W), затем написать блок, удаляющий "лишние" слова (пусть количество слов равно N; от i=1 до N-1 от j=i+1 до N если W[1]=W[j][1], то W[j] удалить, и если произошло хоть одно удаление, то и W тоже удалить) и, наконец, из массива вновь сформировать строку.
Тоже, конечно, не подарок, но хоть прозрачно.
 
Назад
Сверху