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

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

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль

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

Ответ
 
Опции темы Поиск в этой теме
Старый 06.04.2017, 22:53   #1
andrew_ryaba
Пользователь
 
Регистрация: 29.12.2013
Сообщений: 21
По умолчанию Удалить из строки слова, начинающиеся с одинаковой буквы

Здравствуйте! Помогите, пожалуйста, с решением такой задачи: составить программу, которая удаляла бы из строки слова, начинающиеся с одинаковой буквы. Я попытался сделать, но проблема в том, что почти во всех случаях программа удаляет все слова, кроме последнего, даже если они начинаются на разные буквы.
Код:
#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, 10:13   #2
ura_111
Участник клуба
 
Регистрация: 14.05.2016
Сообщений: 1,793
По умолчанию

Хорошенько протестируй (в разных комбинациях букв/слов):
Код:
#include <iostream>
using namespace std;

int main()
{
	char s[100] = "asfd yds dga a rdad faf faa sa aswqq fsdfe sdf ddd fs";
	cout << endl << "BEGIN:  " << s << endl << endl;

	int i, j, k, p;
	bool flag;
		
	i = 0;
	while (s[i] != '\0')
	{
		flag = false;
		j = i;
		while (s[j] != '\0')
		{
			if (s[j] == ' ' && s[j + 1] == s[i])
			{
				flag = true;
				p = j;
				k = j;
				while (true)
				{
					k++;
					if (s[k] == ' ' || s[k] == '\0')
					{				
						break;
					}
				}
				while (s[k] != '\0')
				{
					s[p] = s[k];
					p++;
					k++;
				}
				j--;
				s[p] = '\0';			
			}
			j++;
		}
		if (flag == true)
		{
			cout << "udaleno " << s[i];
			p = i;
			k = i;
			while (true)
			{
				k++;
				if (s[k] == ' ' || s[k] == '\0')
				{					
					break;
				}
			}
			if (s[k] == '\0')
			{
				k--;
			}
			k++;
			while (s[k] != '\0')
			{
				s[p] = s[k];
				p++;
				k++;
			}
			s[p] = '\0';
			cout << ":  " << s << endl;		
		}		
		else
		{
			while (true)
			{
				i++;
				if (s[i] == ' ' || s[i] == '\0')
				{
					break;
				}
			}
			i++;
		}
	}

	cout << endl << "EXIT:  " << s << endl;

	cin >> i; //чтобы консоль не закрывалась
	return 0;
}
ura_111 вне форума Ответить с цитированием
Старый 09.04.2017, 00:34   #3
andrew_ryaba
Пользователь
 
Регистрация: 29.12.2013
Сообщений: 21
По умолчанию

Цитата:
Сообщение от ura_111 Посмотреть сообщение
Хорошенько протестируй (в разных комбинациях букв/слов):
Спасибо, при всех комбинациях, которыми я проверял программу, результат выводился верный.
andrew_ryaba вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Из строки удалить среднюю букву, если длина строки нечетная, если четная удалить две средние буквы. Заменить все вхождения в текст некоторой буквы на другую букву(PascalABCNET) FlayGlam Помощь студентам 0 03.12.2016 09:57
Строки. Преобразовать строку: оставить слова, содержащие буквы и цифры, остальные удалить Ленка ленка Паскаль, Turbo Pascal, PascalABC.NET 1 23.04.2012 11:51
Дан динамический массив строк, вывести все слова начинающиеся с большой буквы C++ builder Memphi[s] Помощь студентам 0 02.03.2011 16:34
в тексте удалить слова начинающиеся с заданой буквы Ananim-Pbl6ak Паскаль, Turbo Pascal, PascalABC.NET 9 26.05.2009 16:39