Форум программистов, компьютерный форум, киберфорум
Наши страницы
C для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.50/4: Рейтинг темы: голосов - 4, средняя оценка - 4.50
VovaMazur
17 / 33 / 0
Регистрация: 10.03.2011
Сообщений: 133
1

Перевести код с С++

10.10.2011, 13:25. Просмотров 785. Ответов 9
Метки нет (Все метки)

помогите пожалуйста переписать код на чистый си
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
#include <iostream>
    #include <fstream>
    #include <string>
     
    using namespace std;
     
    int main()
    {
            setlocale(LC_ALL, "Russian");
     
            int number, counter=0;
            string word;
     
            ifstream fin("text.txt");
            if (!fin.is_open()) {
              cout << "File isn't found." << endl;
              system("pause");
              return 0;
            }
     
            cout << "Enter number words: ";
            cin >> number;
            if (!number)
              return 0;
            string * sentence = new string[number];
     
     
            while (!fin.eof())
            {
                    fin>>word;
                    sentence[(counter++)%number]=word;
     
                    if(word.find_first_of(".!?") != string::npos)
                    {
                            if (counter == number) {
                                    for (int i=0; i<number; i++)
                                            cout << sentence[i] << " ";
                                    cout << endl;
                            }
                            counter=0;
                            word = "";
                    }
            }
     
            system("pause");
            return 0;
    }
0
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
10.10.2011, 13:25
Ответы с готовыми решениями:

Дан код программы на C++, перевести этот код на C
#include &lt;iostream&gt; #include &lt;windows.h&gt; #include &lt;string.h&gt; using...

Перевести код из С++ в Си
Помогите пожалуйста #include &quot;stdafx.h&quot; #include &lt;iostream&gt; #include...

Перевести код с C++
ДД! Помогите переделать код С++ на Си. #include &lt;iostream&gt; union LDC...

Перевести код с С++ на C
#include &quot;iostream&quot; #include &quot;stdlib.h&quot; #include &quot;iomanip&quot; using...

Перевести код с C++
#include &lt;iostream&gt; #include &lt;conio.h&gt; #include &lt;iomanip&gt; using namespace...

9
-=ЮрА=-
Заблокирован
Автор FAQ
10.10.2011, 14:34 2
Как я понял заданием является вывод из файла предложений через пробел, я позволил себе переделать алгоритм
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
#include <windows.h>
#include <string.h>
#include <stdio.h>
#include <conio.h>
 
int main()
{
     SetConsoleOutputCP(1251);
     FILE * fin = fopen("text.txt","rb+");
     if (!fin) 
     {
         printf("File isn't found.\n");
         system("pause");
         return 0;
     }
 
     fseek(fin,0,SEEK_END);
     long sLen = ftell(fin);
     fseek(fin,0,SEEK_SET);
     char * buf = (char *)malloc(sizeof(char)*(sLen + 1));
     if(!buf)
     {
         printf("Allocatiom memory error\n");
         system("pause");
         return 1;
     }
     //Считали весь текст в buf
     fread(buf,sLen,1,fin);
     buf[sLen] = '\0';
     char * sentence = strtok(buf,".!?");
     while (sentence)
     {
         printf("%s \r\n",sentence);
         sentence = strtok(NULL,".!?");
     }
     system("pause");
     return 0;
}
2
Миниатюры
Перевести код с С++  
Вложения
Тип файла: txt text.txt (3.4 Кб, 11 просмотров)
VovaMazur
17 / 33 / 0
Регистрация: 10.03.2011
Сообщений: 133
10.10.2011, 15:35  [ТС] 3
Спасибо. Но задание : нужно ввести какое-то количество слов например 7 и программа должна вывести на экран предложение из txt файла содержащего ровно 7 слов ... .
0
-=ЮрА=-
Заблокирован
Автор FAQ
10.10.2011, 15:40 4
Цитата Сообщение от VovaMazur Посмотреть сообщение
Спасибо. Но задание : нужно ввести какое-то количество слов например 7 и программа должна вывести на экран предложение из txt файла содержащего ровно 7 слов ... .
- теперь смысл алгоритма мне понятен, сейчас займусь
0
-=ЮрА=-
Заблокирован
Автор FAQ
10.10.2011, 16:23 5
Цитата Сообщение от VovaMazur Посмотреть сообщение
Спасибо. Но задание : нужно ввести какое-то количество слов например 7 и программа должна вывести на экран предложение из txt файла содержащего ровно 7 слов ...
- вот подпаял,программа осуществляет вывод на экран тех предложений в которых заданное вначале её работы число слов
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 <windows.h>
#include <string.h>
#include <stdio.h>
#include <conio.h>
 
int IsnWordsInSentence(char * sentence, int nWords);
 
int main()
{
     SetConsoleOutputCP(1251);
     int nWords;
     FILE * fin = fopen("text.txt","rb+");
     if (!fin) 
     {
         printf("File isn't found.\n");
         system("pause");
         return 0;
     }
     printf("Enter num words : ");
     scanf("%d",&nWords);
 
     fseek(fin,0,SEEK_END);
     long sLen = ftell(fin);
     fseek(fin,0,SEEK_SET);
     char * buf = (char *)malloc(sizeof(char)*(sLen + 1));
     if(!buf)
     {
         printf("Allocatiom memory error\n");
         system("pause");
         return 1;
     }
     //Считали весь текст в buf
     fread(buf,sLen,1,fin);
     buf[sLen] = '\0';
     char * sentence = strtok(buf,".!?");
     while (sentence)
     {
         //Проверяем равно ли число слов в sentence nWords
         if(IsnWordsInSentence(sentence,nWords) == 0)
            printf("%s \r\n",sentence);
         sentence = strtok(NULL,".!?");
     }
     system("pause");
     return 0;
}
 
int IsnWordsInSentence(char * sentence, int nWords)
{
    long i, sLen = strlen(sentence);
    char * str = (char *)malloc((sLen + 1)*sizeof(char));
    sprintf(str,"%s",sentence);
    str[sLen] = '\0';
    char buf[32];
    while(*str)
    {
        i = 0;
        while((str += i) != NULL)
        if((str + i)[0] == ' ' || (str + i)[0] == ',') 
            i++;
        else
            break;
 
        sscanf(str,"%s",buf);
        nWords--;
        str += strlen(buf);
        //Между словами могут быть пробелы или запятые
        //пропускаем их
        
    }
    return nWords;
}
text.txt
Это тестовый текст для проверки работоспособности программы. Суть алгоритма поиска изложена ниже.
Вначале в буфер считывается весь файл. После с помощью strtok(buf,"delim") он разбивается на предложения.
В программе присутсвует функция IsnWordsInSentence. Данная функция возращает 0 если число слов совпадает
с заданным, или же разность между числов слов в текущем предложении и заданным количеством.
1
Миниатюры
Перевести код с С++  
VovaMazur
17 / 33 / 0
Регистрация: 10.03.2011
Сообщений: 133
14.11.2011, 19:57  [ТС] 6
А как правильно вывести сообщение о том что предложений с таким количеством слов нет?

Добавлено через 3 часа 5 минут
Куда и как вставить код?
0
-=ЮрА=-
Заблокирован
Автор FAQ
14.11.2011, 20:31 7
Цитата Сообщение от VovaMazur Посмотреть сообщение
А как правильно вывести сообщение о том что предложений с таким количеством слов нет?
- за кол-во слов отвечает
Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
int IsnWordsInSentence(char * sentence, int nWords);
- т.е если возврат от функции буедт не ноль, значит предложение содрежит отличное (меньшее или большее) от nWords число слов

Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
if(IsnWordsInSentence(sentence,nWords) == 0)
* * * * * * * * * * * * printf("%s \r\n",sentence);
вставить легко дописываем ветвь else и в ней пишем printf("Sentence not contain %d words\n",nWords);

C
1
2
3
4
if(IsnWordsInSentence(sentence,nWords) == 0)
* * *printf("%s \r\n",sentence);
else
     printf("Sentence not contain %d words\n",nWords);
0
VovaMazur
17 / 33 / 0
Регистрация: 10.03.2011
Сообщений: 133
20.11.2011, 22:15  [ТС] 8
У меня зацикливание вывода сообщение ...

Добавлено через 45 минут
Цитата Сообщение от VovaMazur Посмотреть сообщение
У меня зацикливание вывода сообщение ...
Теперь все ОК.
0
VovaMazur
17 / 33 / 0
Регистрация: 10.03.2011
Сообщений: 133
28.11.2011, 16:51  [ТС] 9
А что делать с етой строкой /* sentence = strtok(NULL,".!?");*/

C
1
2
3
4
5
6
7
8
9
10
11
{
                 //Провіряєм чи рівне чило слів в sentence nWords
                 if(IsnWordsInSentence(sentence,nWords) == 0)
                        printf("%s \r\n",sentence);
                /* sentence = strtok(NULL,".!?");*/
                 else
                     printf("Речень з такою кiлькiстю слiв немає\n");
                   getch();
 
     return 0;
 }
Когда ее нет else работает, зато не работает printf("%s \r\n",sentence);

Добавлено через 1 час 52 минуты
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
// Lab-1.cpp: определяет точку входа для консольного приложения.
//
 
#include "stdafx.h"
#include <string.h>
#include <stdio.h>
#include <conio.h>
#include "locale.h"
#include "windows.h"
int as=0;
 
int IsnWordsInSentence(char * sentence, int nWords);
 
int main()
{
     setlocale( LC_ALL,"Russian" ); 
         int nWords;
     FILE * fin = fopen("text.txt","rb+");
     if (!fin) 
         {
                 printf("Файл не знайдено.\n");
         getch();
         return 0;
         }
         printf("Введiть кiлькiсть слiв : ");
         scanf("%d",&nWords);
 
         fseek(fin,0,SEEK_END);
         long sLen = ftell(fin);
         fseek(fin,0,SEEK_SET);
     char * buf = (char *)malloc(sizeof(char)*(sLen + 1));
         if(!buf)
         {
                 printf("Помилка розподiлу пам'ятi\n");
                 getch();
         return 1;
         }
 
         //Зчитуєм весь текст в buf
         fread(buf,sLen,1,fin);
         buf[sLen] = '\0';
         char * sentence = strtok(buf,".!?");
 while (sentence)
 
     {
                 //Провіряєм чи рівне чило слів в sentence nWords
                    
                 if (IsnWordsInSentence(sentence,nWords) == 0)
                 {
                        printf("%s \r\n",sentence);
                        as++;
                 }
                 sentence = strtok(NULL,".!?");
                 
                
 }
 if (as==0)
      printf("Речень з такою кiлькiстю слiв немає\n");
                  getch(); 
                 return 0;
 
}
 
int IsnWordsInSentence(char * sentence, int nWords)
{
        long i, sLen = strlen(sentence);
        char * str = (char *)malloc((sLen + 1)*sizeof(char));
        sprintf(str,"%s",sentence);
        str[sLen] = '\0';
        char buf[32];
        while(*str)
        {
                i = 0;
                while((str += i) != NULL)
                if((str + i)[0] == ' ' || (str + i)[0] == ',') 
                        i++;
                else
                        break;
 
                sscanf(str,"%s",buf);
                nWords--;
                str += strlen(buf);
                //Між словами можуть бути пробіли 
                //пропускаем їх
                
        }
        return nWords;
}

финальный код програмы ... !
0
alkagolik
Заблокирован
28.11.2011, 16:51 10
Лучший ответ Сообщение было отмечено Памирыч как решение

Решение

VovaMazur, не слушайте эту чепуху
Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
- за кол-во слов отвечает
int IsnWordsInSentence(char * sentence, int nWords);
эта функция winapi, которая во-первых делает вашу программу непереносимой (кроме виндовс есть еще дрегие ОС), а во-вторых так и не раскрывает вам сути алгоритма поиска количества слов в строке. По сути поиск сводится к подсчету пробелов, вот пример.
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
#include <stdio.h>
 
int numwrd(char *str)
{
    int num = 0;
    while (*str)
    {
        if ( *str == ' ' )
            ++num;
        ++str;
    }
    return num + 1;
}
 
_Bool numwrd_check(char *str, int num)
{
    if (numwrd(str) == num)
        return 1;
    else
        return 0;
}
 
int main(void)
{
    char *str = "this is a string";
    int x, y = 2;
 
    while (y--)
    {
        puts("сколько слов в строке?");
        scanf("%i", &x);
        if (numwrd_check(str, x))
            puts("да");
        else
            puts("нет");
    }
 
    return 0;
}
0
28.11.2011, 16:51
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
28.11.2011, 16:51

Перевести код из С++ в С
Требуется переписать код, но у меня что-то пошло не так и программа выводит...

Перевести код из С++ в С
Друзья, я нуждаюсь в вашей помощи! помогите перевести данный код из С++ в С...

Перевести код с С++ в Си
#include &quot;stdafx.h&quot; #include&lt;iostream&gt; #include&lt;cstring&gt; #include&lt;string.h&gt;...


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

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2019, vBulletin Solutions, Inc.
Рейтинг@Mail.ru