Понедельник, 25 Ноября 2024, 06:00

Приветствую Вас Гость

[ Новые сообщения · Игроделы · Правила · Поиск ]
  • Страница 1 из 1
  • 1
Как переписать код с C++ на С(си)?
tdukДата: Среда, 13 Мая 2020, 20:57 | Сообщение # 1
постоянный участник
Сейчас нет на сайте
Приветствую всех форумчан. Программирую недавно и многого не знаю(
Прошу помогите(подскажите как) переписать этот код с С++ на С?(В С не особо разбираюсь, а времени мало осталось)
Задача: подсчитать кол-во уникальных слов в тексте.
Что делает код: Считывает все слова из файла test.txt и заносит в массив startArr. После этого переносит все уникальные слова в массив res(т е остаются слова без повторений и дубликатов, в единичном числе). В конце выводится количество уникальных слов в тексте(размер массива res)
Прокомментировал, надеюсь все будет понятно

Код

#include <iostream>
#include <vector>
#include <algorithm>
#include <list>
#include <fstream>
#include <sstream>

using namespace std;

int main()
{
    setlocale(LC_ALL, "ru");//подключаем русский

    list <string> startArr;//исходные данные
    list <string> res;//конечный лист

    //чтение файла
    string str;
    ifstream In("D:\\test.txt"); //открываем файл
    if (!In) cout << "Error"; //если не закрыли, то даем ошибку
    if (In.is_open()) {
        while (In>>str) { // пока есть слова заносим их в массив
            startArr.emplace_back(str);
        }
    }
    In.close();//закрываем

    startArr.unique();//убираем дубликаты
    for (auto it = startArr.begin(); it != startArr.end(); it++) {
        auto fr = find(res.begin(), res.end(), *it);//проверяем, есть ли уже этот элемент в новом листе
        if (fr==res.end())
            res.emplace_back(*it);//если нет, то добавляем
    }
    int size = res.size();//записываем размер массива res
    cout << "Уникальных слов: " << size << endl;
    for (auto it = res.begin(); it != res.end(); it++) {
        cout << (*it) << " ";//вывод для отладки
    }
}


kalumbДата: Среда, 13 Мая 2020, 23:22 | Сообщение # 2
почетный гость
Сейчас нет на сайте
По данному коду. Функция unique() удаляет все повторяющиеся элементы их списка. Зачем же вы их перемещаете в res и проверяете в цикле на уникальность?


Сообщение отредактировал kalumb - Среда, 13 Мая 2020, 23:23
tdukДата: Среда, 13 Мая 2020, 23:38 | Сообщение # 3
постоянный участник
Сейчас нет на сайте
kalumb, Она удаляет дубликаты, т е если ей дать "ss sd ss ss sd sd ss", то она отдаст "ss sd ss sd ss". Нужно было, чтобы остались все слова в одном экземпляре

kalumbДата: Четверг, 14 Мая 2020, 01:23 | Сообщение # 4
почетный гость
Сейчас нет на сайте
Как-то так. Для кодировки ANSI.
В массив добавляются только уникальные слова.


Сообщение отредактировал kalumb - Четверг, 14 Мая 2020, 11:21
tdukДата: Четверг, 14 Мая 2020, 13:47 | Сообщение # 5
постоянный участник
Сейчас нет на сайте
kalumb, Спасибо)

  • Страница 1 из 1
  • 1
Поиск:

Все права сохранены. GcUp.ru © 2008-2024 Рейтинг