Форум программистов, компьютерный форум CyberForum.ru

Перевод из С++ в Си - C++

Восстановить пароль Регистрация
 
stasonio
0 / 0 / 0
Регистрация: 23.11.2014
Сообщений: 7
26.11.2014, 19:35     Перевод из С++ в Си #1
у меня есть программа в С++.Как ее написать в Си обычном?
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
#include <iostream>
#include <cstring>
#include <exception>
 
struct Node
{
        char *word;
        int count;
        Node *next;
};
 
Node *CreateList( Node *node, char *inword )
{
    int  index = 0;
 
    if ( node == NULL)
        {
                try
                { node = new Node; }
                catch ( std::bad_alloc&)
                {
                    std::cout << "Error allocating memory." << std::endl;
                }
 
                try
                {   node->word = new char[ strlen ( inword ) + 1 ]; }
                catch ( std::bad_alloc&)
                {
                    std::cout << "Error allocating memory." << std::endl;
                }
            strcpy ( node->word, inword );
            node->count = 1;
            node->next = NULL;
    }
    else if
 
        ((  index = strcmp( inword, node->word )) == 0 )
       //  if ( index == 0 )
             node->count++;
         else
             node->next = CreateList( node->next, inword);
 
    return ( node );
 
}
 
 
int ShowList ( Node * node )
{
    if ( node != NULL )
    {
        std::cout << node->word
                        << "  " << node->count
                             << std::endl;
        ShowList ( node->next );
    }
  return ( 0 );
}
 
void DeleteList( Node *node)
{
    if(node!= NULL)
    {
        DeleteList(node->next);
        delete [] node->word;
        delete node;
    }
}
 
int main()
{
 
    char str[] ={"privet vot eto stroka stas kak dela stas stroka vot"};
    char *word;
    Node* pnode = NULL;
 
    word = strtok( str, " ,.!?()");
    while ( word )
    {
        pnode = CreateList ( pnode , word );
        word = strtok( NULL, " ,.!?()");
    }
 
    ShowList ( pnode );
    DeleteList( pnode );
 
    return ( 0 );
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
26.11.2014, 19:35     Перевод из С++ в Си
Посмотрите здесь:

Перевод на С++ C++
перевод из С++ в Си C++
C++ Перевод из 2-ой в 8-ую СС
C++ Перевод в 8-ю ЧС
C++ Перевод
C++ Перевод из C в С++
Перевод С++ в Си C++
Перевод с С на С++ C++

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
TheCalligrapher
С чаем беда...
Эксперт С++
 Аватар для TheCalligrapher
2908 / 1444 / 397
Регистрация: 18.10.2014
Сообщений: 2,662
26.11.2014, 21:07     Перевод из С++ в Си #2
Цитата Сообщение от stasonio Посмотреть сообщение
Как ее написать в Си обычном?
Вот буквальный перевод вашей программы, без исправления ошибок, но с небольшими стилистическими изменениями. В частности, ваш код неправильно обрабатывает ошибки выделения памяти - если память не была успешно выделена, он выдает сообщение об ошибке, но потом тупо продолжает работать с невыделенной памятью. Я сохранил это поведение и в моем варианте.

Т.е. ошибки подобного рода надо еще дополнительно исправлять.

C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
 
typedef struct Node
{
  char *word;
  int count;
  struct Node *next;
} Node;
 
Node *CreateList(Node *node, char *inword)
{
  if (node == NULL)
  {
    node = malloc(sizeof *node);
    if (node == NULL)
      printf("Error allocating memory.\n");
 
    node->word = malloc(strlen(inword) + 1);
    if (node->word == NULL)
      printf("Error allocating memory.\n");
 
    strcpy(node->word, inword);
    node->count = 1;
    node->next = NULL;
  }
  else if (strcmp(inword, node->word) == 0)
    node->count++;
  else
    node->next = CreateList(node->next, inword);
 
  return node;
}
 
int ShowList(Node * node)
{
  if (node != NULL)
  {
    printf("%s %d\n", node->word, node->count);
    ShowList(node->next);
  }
  return 0;
}
 
void DeleteList(Node *node)
{
  if (node != NULL)
  {
    DeleteList(node->next);
    free(node->word);
    free(node);
  }
}
 
int main()
{
  char str[] = "privet vot eto stroka stas kak dela stas stroka vot";
  char *word;
  Node* pnode = NULL;
 
  word = strtok(str, " ,.!?()");
  while (word != NULL)
  {
    pnode = CreateList(pnode, word);
    word = strtok(NULL, " ,.!?()");
  }
 
  ShowList(pnode);
  DeleteList(pnode);
}
Yandex
Объявления
26.11.2014, 21:07     Перевод из С++ в Си
Ответ Создать тему
Опции темы

Текущее время: 21:39. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru