Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 06.11.2010, 23:23   #1
jambas92
Пользователь
 
Регистрация: 09.10.2010
Сообщений: 27
Смущение перписать программу(с++)

Здравствуйте, перепешите программу с С на С++. Очень признателен за помощь...
Код:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
 
/* 
        удалить из строки все повторные вхождения слов
*/
 
int main(void){
        char **words, *pWord, buf[BUFSIZ];
        size_t size, i, j;
        
        while ( 1 ){ /* бесклнечный цикл */
                printf("\nString: ");
                if ( !fgets(buf, BUFSIZ, stdin) ){ /* прочитать строку */
                        fprintf(stderr, "Can't get string!\n");
                        exit(1);
                }
                if ( pWord = strrchr(buf, '\n') )
                        *pWord = '\0'; /* удалить символ перевода строки */
                
                if ( !*buf )
                        break; /* если строка пустая - на выход */
                
                /* разделение строки на массив слов */
                words = NULL;
                size = 0;
                for ( pWord = strtok(buf, " \t"); pWord != NULL; pWord = strtok(NULL, " \t") ){
                        if ( ( words = (char**)realloc(words, sizeof(char*) * (size + 1)) ) == NULL ){
                                fprintf(stderr, "Memory error!\n");
                                exit(1);
                        }
                        if ( ( words[size] = strdup(pWord) ) == NULL ){
                                fprintf(stderr, "Memory error!\n");
                                exit(1);
                        }
                        ++size;
                }
                if ( !words ){
                        fprintf(stderr, "Can't find some words!\n");
                        exit(1);
                }
                
                /* поиск и удаление повторяющихся слов */
                for ( i = 0; i < size - 1; ++i ){
                        if ( !*words[i] )
                                continue;
                        for ( j = i + 1; j < size; ++j ){
                                if ( !strcmp(words[i], words[j]) ){
                                        *(words[j]) = '\0';
                                }
                        }
                }
        
                /* вывод слов с пробелами */
                for ( i = 0; i < size; ++i )
                        if ( *(words[i]) )
                                printf("%s ", words[i]);
                printf("\n");
        
                /* очистка памяти */
                do {
                        free(words[--size]);
                } while ( size );
                free(words);
        }
        
        /* завершение программы */
        exit(0);
}

Последний раз редактировалось AlDelta; 07.11.2010 в 01:31. Причина: [code][/code]
jambas92 вне форума Ответить с цитированием
Старый 06.11.2010, 23:30   #2
Mad_Cat
Made In USSR!
Старожил
 
Аватар для Mad_Cat
 
Регистрация: 01.09.2010
Сообщений: 3,657
По умолчанию

под Builder XE пойдет?

Код:
#include "stdio.h"
#include "stdlib.h"
#include "string.h"

/*
удалить из строки все повторные вхождения слов
*/

int main(void){
char **words, *pWord, buf[BUFSIZ];
size_t size, i, j;

while ( 1 ){ /* бесклнечный цикл */
printf("\nString: ");
if ( !fgets(buf, BUFSIZ, stdin) ){ /* прочитать строку */
fprintf(stderr, "Can't get string!\n");
exit(1);
}
if ( pWord = strrchr(buf, '\n') )
*pWord = '\0'; /* удалить символ перевода строки */

if ( !*buf )
break; /* если строка пустая - на выход */

/* разделение строки на массив слов */
words = NULL;
size = 0;
for ( pWord = strtok(buf, " \t"); pWord != NULL; pWord = strtok(NULL, " \t") ){
if ( ( words = (char**)realloc(words, sizeof(char*) * (size + 1)) ) == NULL ){
fprintf(stderr, "Memory error!\n");
exit(1);
}
if ( ( words[size] = strdup(pWord) ) == NULL ){
fprintf(stderr, "Memory error!\n");
exit(1);
}
++size;
}
if ( !words ){
fprintf(stderr, "Can't find some words!\n");
exit(1);
}

/* поиск и удаление повторяющихся слов */
for ( i = 0; i < size - 1; ++i ){
if ( !*words[i] )
continue;
for ( j = i + 1; j < size; ++j ){
if ( !strcmp(words[i], words[j]) ){
*(words[j]) = '\0';
}
}
}

/* вывод слов с пробелами */
for ( i = 0; i < size; ++i )
if ( *(words[i]) )
printf("%s ", words[i]);
printf("\n");

/* очистка памяти */
do {
free(words[--size]);
} while ( size );
free(words);
}

/* завершение программы */
exit(0);
}
"...В жизни я встречал друзей и врагов.В жизни много всего перевидал.Солнце тело мое жгло, ветер волосы трепал,но я смысла жизни так и не узнал..."
(c) Юрий Клинских aka "Хой"
Mad_Cat вне форума Ответить с цитированием
Старый 06.11.2010, 23:36   #3
jambas92
Пользователь
 
Регистрация: 09.10.2010
Сообщений: 27
По умолчанию

спасибо за код конечно, ноя только начинаю программировать и только на microsoft visual studio 2008 express edition, и я непонимаю язык С. Лучше если код был бы на С++ и с библиотеками <iostream>, <cctype>, <cstring>...
jambas92 вне форума Ответить с цитированием
Старый 07.11.2010, 13:00   #4
RUSt88
Участник клуба
 
Регистрация: 29.12.2009
Сообщений: 1,166
По умолчанию

понимаешь, С с С++ очень тесно переплетен, тебе только пару часов погуглить (ну эт ваще максимум), если ты этот код конечно сам написал, а если чужой код и не сечешь в нем - я могу переписать, как твоей душе угодно, но за денежкку
прогер C\C++\C#\Delphi
ася: [семь 3]-[97]-[1 шесть]
RUSt88 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Исправьте программу Student30 Паскаль, Turbo Pascal, PascalABC.NET 2 21.09.2010 19:19
Исправить программу amfisat Общие вопросы C/C++ 3 02.06.2010 08:22
Написал программу, помогите натянуть Шейдеры или как нибудь модифицировать программу WMLite Паскаль, Turbo Pascal, PascalABC.NET 0 16.06.2009 13:57
подредактируйте программу Neytron Паскаль, Turbo Pascal, PascalABC.NET 9 05.06.2009 00:54
Написать программу. project.one Фриланс 3 17.06.2008 16:11