Технический форум

Технический форум (http://www.tehnari.ru/)
-   Помощь студентам (http://www.tehnari.ru/f41/)
-   -   C++: Удалить из строки слова, начинающиеся с одинаковой буквы (http://www.tehnari.ru/f41/t253128/)

andrew_ryaba 07.04.2017 00:01

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();
}


Viewer 07.04.2017 02:15

сортировка по правилу distinct (уникальные).

Vladimir_S 07.04.2017 12:15

Цитата:

Сообщение от andrew_ryaba (Сообщение 2476846)
Здравствуйте! Помогите, пожалуйста, с решением такой задачи: составить программу, которая удаляла бы из строки слова, начинающиеся с одинаковой буквы. Я попытался сделать, но проблема в том, что почти во всех случаях программа удаляет все слова, кроме последнего, даже если они начинаются на разные буквы.

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


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

Powered by vBulletin® Version 4.5.3
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.