Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Программирование и базы данных » C/C++ - найти в строке слова с одинаковым составом букв

Ответить
Настройки темы
C/C++ - найти в строке слова с одинаковым составом букв

Новый участник


Сообщения: 8
Благодарности: 0

Профиль | Отправить PM | Цитировать


Ребят, помогите пожалуйста, есть код, в строку вбивается слово. Нужно в строке найти группы слов, имеющие одинаковый состав букв (количество одинаковых букв не имеет значения), слова выводить в порядке их вхождения в строку. Ну например в строке идут слова: abba abaa abca ab abc, затем идет разделение по строкам, в первую строку идут abba abaa и ab, так как состав букв одинаковый, затем новая строчка: abca abc. Ну... как-то так, мне бы хотя бы узнать как поиск реализуется. Очень нужно, буду благодарен.
Код: Выделить весь код
#include "stdafx.h"
#include <string.h>
#include <stdio.h>

void main()
{
char str[81]; // Исходная строка

gets(str);

char copy_str[81]; // копия строки, чтобы не портить исходную
strcpy(copy_str,str); // делаем копию

char *razdel=" \n\t\r\".,!?"; // Разделители слов (для разбивки) 
char *word; // очередное слово строки

word=strtok(copy_str,razdel); // получаем первое слово

while(word)
{
printf("%s\n", word); // печатаем очередное слово
word=strtok(NULL,razdel); // далее (с текущего места в строке) - получаем следующее слово
}

getch();

}

Отправлено: 20:33, 25-05-2014

 
pva pva вне форума

Аватара для pva

Ветеран


Сообщения: 1180
Благодарности: 279

Профиль | Отправить PM | Цитировать


я всегда считал, что конкретная реализация на языке - дело вторичное. Главное - понимание того, что хочешь сделать и владение примитивами программирования (строки, стеки, вектора, словари...)
Скажи на пальцах как хочешь сделать - мы закодируем

Отправлено: 22:35, 25-05-2014 | #2



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля.


Аватара для User001

Ветеран


Сообщения: 740
Благодарности: 116

Профиль | Отправить PM | Цитировать


Цитата Frozen_Sky:
Ну... как-то так, мне бы хотя бы узнать как поиск реализуется. »
На C писать долго будете. Самое простое делаете список, элементы которого списки слов. Далее разбираете ваши строки, ищете из каких букв состоят. Если в списке есть такая запись, то добавляете строку туда, если нет, то создаете элемент списка.
А вообще, если на C++, то с помощью того же map это вполне быстро пишется.

Отправлено: 07:13, 26-05-2014 | #3


Новый участник


Сообщения: 8
Благодарности: 0

Профиль | Отправить PM | Цитировать


pva, если бы я знал, как хочу сделать, а так увы. Все что знаю, что нам нельзя использовать stl функции, все писать самостоятельно руками, а я понятие не имею как. Возможно ли как то поиск сделать через массив?

User001,
Цитата User001:
Далее разбираете ваши строки, ищете из каких букв состоят. Если в списке есть такая запись, то добавляете строку туда, если нет, то создаете элемент списка. »
кстати, вроде неплохой вариант, а можно хотя бы примерно глянуть как это выглядеть должно? P.S. пишу на С++

Отправлено: 17:18, 26-05-2014 | #4

pva pva вне форума

Аватара для pva

Ветеран


Сообщения: 1180
Благодарности: 279

Профиль | Отправить PM | Цитировать


Цитата Frozen_Sky:
Возможно ли как то поиск сделать через массив? »
И ещё как можно! Но наша цель не в том, чтобы обязательно использовать массив, а в том, чтобы научиться "придумывать" программы
Frozen_Sky, как бы вы это написали на C++?

Отправлено: 21:20, 26-05-2014 | #5


Аватара для User001

Ветеран


Сообщения: 740
Благодарности: 116

Профиль | Отправить PM | Цитировать


Цитата Frozen_Sky:
кстати, вроде неплохой вариант, а можно хотя бы примерно глянуть как это выглядеть должно? »
Не знаю, зачем оно вам, не должно, а один из вариантов. Например, так:
читать дальше »
Код: Выделить весь код
#include <iostream>
#include <string>
#include <list>
#include <sstream>
#include <map>
#include <algorithm>

std::string get_letters(std::string word)
{
    std::string letters;
    for (size_t i = 0; i < word.length(); ++i)
        if (letters.find(word[i], 0) == std::string::npos)
            letters.push_back(word[i]);
    std::sort(letters.begin(), letters.end());
    return letters;
}

int main()
{
    std::list<std::string> words;
    std::string text = "abba abaa abca ab abc abd ddbba abcccba";
    std::istringstream ist(text);
    std::string buffer;
    while (ist >> buffer)
        words.push_back(buffer);
    std::cout << "Number of words: " << words.size() << std::endl;

    std::map<std::string, std::list<std::string> > table;
    for (std::list<std::string>::iterator it = words.begin(); it != words.end(); ++it)
        table[get_letters(*it)].push_back(*it);

    for (std::map<std::string, std::list<std::string> >::iterator it = table.begin(); it != table.end(); ++it)
    {
        std::cout << it->first << ": ";
        for (std::list<std::string>::iterator it2 = it->second.begin(); it2 != it->second.end(); ++it2)
            std::cout << *it2 << ' ';
        std::cout << std::endl;
    }

    return 0;
}

На академичности и чистоту кода не претендую, про auto слышал.
А вообще, pva прав, сейчас задача
Цитата pva:
научиться "придумывать" программы »
.

Отправлено: 08:30, 27-05-2014 | #6



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Программирование и базы данных » C/C++ - найти в строке слова с одинаковым составом букв

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
CMD/BAT - [решено] Поиск слова в последней строке support23 Скриптовые языки администрирования Windows 5 16-08-2012 13:04
[решено] PHP, определение слова в строке foma24 Вебмастеру 3 30-05-2012 15:35
Ошибка - когда открываю программу, в командной строке вместо русских букв какие-то иероглифы elyno@vk Microsoft Windows 2000/XP 8 06-05-2012 18:42
CMD/BAT - Помогите найти цифру в строке bat файла vitalijch Скриптовые языки администрирования Windows 1 24-03-2012 20:19
Delphi - [решено] Нужна помощь с ассемблером в Delphi (найти точку в строке). Jhakal Программирование и базы данных 2 29-12-2006 17:44




 
Переход