• B правой части каждого сообщения есть стрелки и . Не стесняйтесь оценивать ответы. Чтобы автору вопроса закрыть свой тикет, надо выбрать лучший ответ. Просто нажмите значок в правой части сообщения.

  • Курсы Академии Кодебай, стартующие в мае - июне, от команды The Codeby

    1. Цифровая криминалистика и реагирование на инциденты
    2. ОС Linux (DFIR) Старт: 16 мая
    3. Анализ фишинговых атак Старт: 16 мая Устройства для тестирования на проникновение Старт: 16 мая

    Скидки до 10%

    Полный список ближайших курсов ...

переделать с С++ в Си код

K

Kaneki

здраствуйте...помогите пжлст...кто знает как можно этот код переделать из С++ на С так что бы он работал или хотя бы какой то есть аналог include <map> , include <locale>или как их можно выразить ?

C++:
#include <locale>
#include <cstdlib>
#include <Windows.h>
#include <iostream>
#include <map>
#include <string>
#include <fstream>

using namespace std;
 
int main()
{
    setlocale (LC_CTYPE, "rus");
    SetConsoleCP(1251);
    SetConsoleOutputCP(1251);
 
    ifstream in("words.txt");
 
    string s1, s2;
    map <string, string> words;
 
    while(in >> s1 >> s2)
    {
        words[s1] = s2;
        words[s2] = s1;
    }
    in.close();

    while(true)
    {   
        cout << "Enter the word in Eng or Rus for translation "
                "(1 - add word for dictionary or 2 - exit):\n ";
    
        cin >> s1;
        
        if(s1 == "2") break;
        
        if(s1 == "1")
        {
             string wrd, trn;
             FILE *file;
 
             if ((file = fopen("words.txt","a")) == NULL)
             {
                printf("File not found...\n");
                continue;
             }
             else
             {
                 cout << "Enter the word in English: ";
                 cin >> wrd;
                 cout << "Enter translation: ";
                 cin >> trn;
                
                 fprintf(file, "%s%c%s%c", wrd.c_str(), ' ', trn.c_str(), '\n');
 
                 words[wrd] = trn;
                 words[trn] = wrd;
             }
             cout << "The word and translation are written in the dictionary..." << endl;
            
             fclose(file);
        }
        else
        {
            if(words.find(s1) != words.end())
                cout << "Word translation: " << words[s1] << endl;
            else
                cout << "The dictionary did not find it..." << endl;
        }
    }
 
    system("pause");
    return 0;
}
 
T

Tom

здраствуйте...помогите пжлст...кто знает как можно этот код переделать из С++ на С так что бы он работал или хотя бы какой то есть аналог include <map> , include <locale>или как их можно выразить ?
Самый простой способ:
- транслируете код С++ в исполняемый файл - или если можете сразу в ассемблер - если НЕ можете, транслируйте С++ в DLL...
- и делаете вставку ассемблерного кода в Си... И "не паритесь"... Дальше можно упрощать... (И изучать перевод С++ в Си...)))
 
  • Нравится
Реакции: Сергей Попов
S

Sphinx

Действительно, в языке С таких аналоговых библиотек, как <map> попросту нет.
По этой причине её необходимо заменить отдельным кодом:
C:
#include <search.h>
#include <stdlib.h>
#include <string.h>
#include <stdio.h>

typedef struct
{
      int key;
      char* value;
} intStrMap;

int compar(const void *l, const void *r)
{
    const intStrMap *lm = l;
    const intStrMap *lr = r;
    return lm->key - lr->key;
}

int main(int argc, char **argv)
{
    void *root = 0;

    intStrMap *a = malloc(sizeof(intStrMap));
    a->key = 2;
    a->value = strdup("two");
    tsearch(a, &root, compar); /* insert */

    intStrMap *find_a = malloc(sizeof(intStrMap));
    find_a->key = 2;

    void *r = tfind(find_a, &root, compar); /* read */
    printf("%s", (*(intStrMap**)r)->value);

    return 0;
}
Насчёт библиотеки <locale>: в С существует данная библиотека в виде заголовочного файла <locale.h> С остальными похожими библиотека аналогичная ситуация. Для достоверности — проверьте. Остальной же код переписать на С не составит особого труда при наличии поисковика.
Если Вы всё-таки решились транслировать в ассемблерный код, то, в таком случае, данный код необходимо вставить в С следующим образом:
C:
__asm__ __volatile__(/*Assembly Code*/)
Но, всё же, я бы не советовал Вам этого делать. Лучше, когда наблюдаешь код, чем непонятную последовательность символов.
Надеюсь, сумел хоть чем-то помочь Вам.
 
Последнее редактирование модератором:
K

Kaneki

Самый простой способ:
- транслируете код С++ в исполняемый файл - или если можете сразу в ассемблер - если НЕ можете, транслируйте С++ в DLL...
- и делаете вставку ассемблерного кода в Си... И "не паритесь"... Дальше можно упрощать... (И изучать перевод С++ в Си...)))
окей ассемблера код есть как его перевести в код Си...через dev c++ или qt можно как-то?
 
T

Tom

окей ассемблера код есть как его перевести в код Си...
А зачем код асм переводить в Си?
Был предложен "самый быстрый" перевод кода С++ в... код, который можно использовать...

Хочу обратить внимание: Вы хотите перевести имеющийся код С++ в Си - но не сами (самостоятельно) - а используюя "БЕСПЛАТНУЮ ПОМОЩЬ" - в этом случае я показал Вам как действовать - И ОБРАТИЛ ВАШЕ ВНИМАНИЕ, что дальше Вам следует изучать Си и С++ более подробно и ОБРАЩАТЬ ОСОБОЕ ВНИМАНИЕ на РАЗЛИЧИЯ перевода кода в Асм.
Чтобы в дальнейшем Вы самостоятельно могли переводить код С++ в Си - надеюсь Вы понимаете, что данный форум - это НЕ ИСТОЧНИК бесплатного перевода кода С++ в Си "апсолютно всем, в люпое время и в люпом количестве"... Согласны?
Ксати, уважаемый @Sphinx
Действительно, в языке С таких аналоговых библиотек, как <map> попросту нет.
показал Вам как действовать дальше...
Изучайте перевод кода С++ в Асм и перевод кода Си в Асм - и будет вам счастье(С)... Да пребудет с Вами СИЛА(С)
 
Последнее редактирование модератором:
  • Нравится
Реакции: Глюк и Sphinx
Мы в соцсетях:

Обучение наступательной кибербезопасности в игровой форме. Начать игру!