Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Центр помощи > [C++] Удаление слов из строки С


Автор: VivO2714 12.11.2009, 23:42
Здравствуйте. Помогите пожалуйста выполнить задание, просто я только начал изучать программирование и не могу понять, как реализовать это: Дана строка, содержащая последовательность слов, разделенных пробелами. Необходимо удалить из строки все слова в которых есть заданная буква (строку и букву вводит пользователь). И удалять необходимо только слова в которых есть заданная буква, все остальные слова и пробелы необходимо оставить.

Автор: Enelar 13.11.2009, 01:16
ммм код писать лениво.
приведу самое простое решение как мне кажется.

нужно 2 массива строк.

1. считать строку.
2. считать символ.
3. зашли в цикл.
4. выделяем слово
5. ищем в слове букву на совпадение
6. если буква не найденна копируем слово в новую строку(вторую)
7. если строка не кончилась вернись в 4

алгоритм не оптимизированный и я сходу вижу 2 улучшения, но так оно понятнее будет.
если что попробую подробнее обьяснить.

если у вас ограниченна память то есть еще вариант, ненамного сложнее но все же.

Автор: VivO2714 13.11.2009, 05:44
Чего-то у меня не получается это реализовать. Сам то алгоритм я понял, но после многих неудачных попыток реализовать его, я уже не могу ничего придумать. 
Enelar не мог бы ты написать код???Просто очень надо.

Автор: bsa 13.11.2009, 11:37
Для домашних заданий, курсовых, существует "Центр Помощи".

Тема перенесена! 

Автор: ИванМ 13.11.2009, 18:09
Что-то типа того:
Код

#include <iostream>

int main()
{
    char *s=new char[256];
    char *outs=new char[256];
    outs[0]=0;
    char c;
    std::cout<<"Enter the string: ";
    std::cin.getline(s, 256);
    std::cout<<"Enter the symbol: ";
    std::cin>>c;
    int start=0;
    bool b=true;    
    for(size_t i=0;i<strlen(s);i++)
    {        
        if(s[i]==c)
            b=false;
        if(s[i]==' ')
        {            
            if(b)
                strncat(outs, s+start, i-start+1);
            b=true;
            start=i+1;
        }
    }
    if(b)
        strcat(outs, s+start);
    std::cout<<outs<<std::endl;
    system("pause");
    return 0;
}

Автор: VivO2714 14.11.2009, 02:05
Спасибо всем за помощь!

Автор: kectart 12.10.2022, 22:38
Модератор: Сообщение скрыто.

Автор: Dov 17.10.2022, 06:30
Цитата(VivO2714 @  12.11.2009,  22:42 Найти цитируемый пост)
Удаление слов из строки С 

Код

#include <stdio.h>
#include <string.h>

#define DELIM " \t\n"

int main(){
    char buf[BUFSIZ] = "";

    printf( "String: " );
    fgets( buf, BUFSIZ, stdin );

    printf( "Letter: " );
    int ch = getchar();

    printf( "Result: " );
    for( char * p = strtok( buf, DELIM ); p; p = strtok( NULL, DELIM ) )
        if( !strchr( p, ch ) )
            printf( "%s ", p );

    printf( "\n" );
    return 0;
}


Автор: Queuego 5.11.2022, 11:10
Модератор: Сообщение скрыто.

Автор: wectula 10.12.2022, 03:40
Модератор: Сообщение скрыто.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)