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

Задача на обработку текста (sos)

25.12.2011, 20:04. Просмотров 734. Ответов 10
Метки нет (Все метки)

Задана фраза - последовательность, содержащая от 2 до 30 слов, в каждом из которых от 2 до 10 букв; между соседними словами - не менее одного пробела, за последним словом - точка. Напечатать все слова, отличные от последнего слова, предварительно преобразовав каждое из них по следующему правилу: если слово нечётной длины, то удалить его среднюю букву.
Программа должна читать текст из файла input.txt и выводить последовательность в файл output.txt
\

Суть в том, что я понимаю, как нужно сделать задачу, но практических знаний совершенно не хватает. Пожалуйста, помогите с кодом.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
25.12.2011, 20:04
Ответы с готовыми решениями:

Выполнить обработку текста
Друзья, помогите пожалуйста: Выполнить обработку текста из внешнего...

Задача на обработку
В каждой компоненте файла АБИТУРИЕНТ содержится: − фамилия абитуриента; −...

Задача на обработку строк
Дана строка символов. Преобразовать строку, удалив из нее все символы, не...

Задача на обработку строки
Народ, помогите решить задачу! Не знаю, как решать! Определить, равно ли...

Задача на последовательную обработку символов
Дан текст произвольной длины,оканчивающийся точкой. Текст состоит из...

10
Henny
0 / 0 / 0
Регистрация: 12.12.2011
Сообщений: 8
10.01.2012, 07:20  [ТС] 2
Может всё же поможет кто? Погибаю как бы... Сам копался - толку мало(( Не получается.
0
zss
Модератор
Эксперт С++
7394 / 6790 / 4295
Регистрация: 18.12.2011
Сообщений: 17,933
Завершенные тесты: 1
10.01.2012, 07:51 3
1. Создайте массив words[30][11];
2. Откройте файл FILE *ff=fopen("input.txt","rt");
2. В цикле считайте фразу по словам в массив функцией fscanf(ff,"%s"&word[i]);
3. Длина каждого слова int L=strlen(word[i]); Средняя буква =L/2;
4. Сравнение слов K=strcmp(word[i],word[j]); К=нулю, если одинаковые
Начинайте делать и выкладывайте, что получается.
0
Henny
0 / 0 / 0
Регистрация: 12.12.2011
Сообщений: 8
10.01.2012, 08:06  [ТС] 4
Боюсь, мало что соображаю в этом...пытался разбираться по похожей программе, но с удалением первой буквы в словах. К сожалению, неудачно... Ниже привожу код.
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
#include <conio.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int possl(char x[10], char y[10])
{
int i=0;
while (x[i]==y[i]&&x[i]!=0&&y[i]!=0)
i++;
if(x[i]==y[i]) return 1; else return 0;
}
/* Main */
void main(void)
{
char mas[30][10];
FILE *in;
in=fopen("input.txt","rt");
char ch;
int i=0,j=0,w=1;
while (!feof(in))
{
ch=fgetc(in);
if(ch=='.') {mas[i][j]=0;break;}
if(ch!=' ') {mas[i][j]=ch; j++; w=0;}
else
if(!w)
{mas[i][j]=0; i++; j=0; w=1;}
}
fclose(in);
int str=i; 
for(i=0;i<str;i++)
if(!possl(mas[i],mas[str]))
for(j=0;j<strlen(mas[i]);j++)
{
ch=mas[i][j];
mas[i][j]=mas[i][j+1];
mas[i][j+1]=ch;
}
FILE *out;
out=fopen("output.txt","wt");
for (i=0;i<str;i++)
if(!possl(mas[i],mas[str]))
{
int j=0;
while (mas[i][j]!=0)
{
fputc(mas[i][j],out);
j++;
}
fputc(' ',out);
}
fclose(out);
}
0
zss
Модератор
Эксперт С++
7394 / 6790 / 4295
Регистрация: 18.12.2011
Сообщений: 17,933
Завершенные тесты: 1
10.01.2012, 08:27 5
Ваша задача ведь проще
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
#include <string.h>
#include <stdio.h>
void main(void)
{
    char mas[30][11];
    FILE *in;
    in=fopen("input.txt","rt");
    if(in!=NULL)
    {
        int i=0;
        while (!feof(in) && i<30)
        {
            fscanf(in,"%s",&mas[i]);
            int L=strlen(mas[i]);
            if(mas[i][L-1]=='.')break;
            i++;
        }
        fclose(in);
        int str=i; 
        for(i=0;i<str;i++)
        {
            int L=strlen(mas[i]);
            if(L%2!=0)
                for(int j=L/2;j<L-1;j++)
                    mas[i][j]=mas[i][j+1];
        }
        FILE *out;
        out=fopen("output.txt","wt");
        for (i=0;i<str;i++)
            if(strcmp(mas[i],mas[str])!=0)
                fprintf(out,"%s ",mas[i]);
        fclose(out);
    }
}
1
Henny
0 / 0 / 0
Регистрация: 12.12.2011
Сообщений: 8
10.01.2012, 09:31  [ТС] 6
Спасибо! Оказалось действительно проще... Осталось написать сравнение с последним словом и всё =) С этим-то справлюсь.
0
zss
Модератор
Эксперт С++
7394 / 6790 / 4295
Регистрация: 18.12.2011
Сообщений: 17,933
Завершенные тесты: 1
10.01.2012, 09:41 7
Сравнение с последним словом уже написано - строка 30
0
Henny
0 / 0 / 0
Регистрация: 12.12.2011
Сообщений: 8
10.01.2012, 10:17  [ТС] 8
Это я заметил. Но почему-то на деле программа не сравнивает и выводит все слова, независимо от того, идентичны ли они последнему или нет.
0
neske
1527 / 894 / 192
Регистрация: 26.03.2010
Сообщений: 3,074
10.01.2012, 15:09 9
C
1
if(strcmp(mas[i],mas[str-1])!=0)
?
1
Henny
0 / 0 / 0
Регистрация: 12.12.2011
Сообщений: 8
11.01.2012, 13:22  [ТС] 10
Да, эта строка. Но там немного неточность была. Программа проверяет уже отредактированные слова с последним. Так что эту проверку надо было перенести чуть выше) До цикла for.
0
easybudda
Модератор
Эксперт CЭксперт С++
10147 / 6054 / 1521
Регистрация: 25.07.2009
Сообщений: 11,476
11.01.2012, 18:55 11
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
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
    
#define WORDS_MAX 30
#define WORD_LEN 11
#define WORD_MIN_LEN 2
#define WORD_MASK "%10s"
#define INPUT_FILE "input.txt"
#define OUTPUT_FILE "output.txt"
    
int main(void){
    FILE * f;
    char words[WORDS_MAX][WORD_LEN], * p;
    int i, count, len;
    
    if ( ! ( f = fopen(INPUT_FILE, "r") ) ){
        perror("fopen");
        exit(1);
    }
    
    for ( count = 0; count < WORDS_MAX && fscanf(f, WORD_MASK, words[count]) == 1; ++count ){
        if ( strlen(words[count]) < WORD_MIN_LEN ){
            fprintf(stderr, "Wrong content in input file!\n");
            exit(1);
        }
        if ( p = strrchr(words[count], '.') ){
            *p = '\0';
            ++count;
            break;
        }
    }
    
    if ( ferror(f) || fclose(f) ){
        perror("FILE");
        exit(1);
    }
    
    if ( count < 2 ){
        fprintf(stderr, "Only one word found in input file!\n");
        exit(1);
    }
    
    if ( ! ( f = fopen(OUTPUT_FILE, "w") ) ){
        perror("fopen");
        exit(1);
    }
    
    for ( i = 0; i < count - 1; ++i ){
        if ( strcmp(words[i], words[count-1]) ){
            if ( ( len = strlen(words[i]) ) & 1 ){
                p = words[i] + len / 2;
                memmove(p, p + 1, strlen(p));
            }
            if ( fprintf(f, "%s ", words[i]) < 0 ){
                perror("fprintf");
                exit(1);
            }
        }
    }
    
    if ( fclose(f) ){
        perror("FILE");
        exit(1);
    }
    
    fprintf(stderr, "Done.\n");
    exit(0);
}
Код
andrew@rd-andrew ~/cpp/files
$ cat input.txt
abc defg abcd abcde defg abcdefg abcd. zzz abc
andrew@rd-andrew ~/cpp/files
$ gcc -o even_words_not_like_last even_words_not_like_last.c

andrew@rd-andrew ~/cpp/files
$ ./even_words_not_like_last
Done.

andrew@rd-andrew ~/cpp/files
$ cat output.txt
ac defg abde defg abcefg
andrew@rd-andrew ~/cpp/files
$
0
11.01.2012, 18:55
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
11.01.2012, 18:55

Задача на обработку символьной информации
В заданном предложении найти слово, в котором количество буквы 'а' максимальна....

задача на обработку символьных строк
2. Разработать программу подсчёта статистики массива символьных строки в...

задача на обработку последовательности символов
Даны натуральное число n , символы S1, .... Sn. Заменить в последовательности...


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

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

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