Форум программистов, компьютерный форум, киберфорум
C для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.75/8: Рейтинг темы: голосов - 8, средняя оценка - 4.75
QANTAS
1

Для считанной строки S удалите все слова, встречающиеся более двух раз

29.12.2012, 13:12. Показов 1487. Ответов 2
Метки нет (Все метки)

Собстственно вот само задание: "Для считанной строки S удалите все слова, встречающиеся более двух раз."
Помогите пожалуйста написать программу)
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
29.12.2012, 13:12
Ответы с готовыми решениями:

Удалить из массива все элементы, встречающиеся более двух раз
Все массивы создаются динамически. Ввод и вывод массива осуществлять в одну строку. Серия -...

Удалить из массива все элементы встречающиеся более двух раз
Задание: Задан целочисленный массив размера N. Удалить из массива все элементы встречающиеся более...

Удалить из массива все элементы, встречающиеся более двух раз
Помогите пожалуйста с задачей: "Дан целочисленный массив, состоящий из n элементов. Удалить из...

Удалить из массива все элементы, встречающиеся более двух раз
Условие задачи описано ниже, помогите пж найти ошибку в коде :) #include <stdio.h> #include...

__________________
2
Студент
121 / 132 / 39
Регистрация: 07.04.2011
Сообщений: 503
29.12.2012, 19:08 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
39
40
41
42
43
44
45
46
47
48
void main(){
 
    char str[1024];
    char out_str[1024];
    char words[50][50];
    
    int i = -1, word = 0, chars = 0, out = 0;
    
    unsigned char flag = 0;
 
    while((str[++i] = getchar()) != EOF){
        if(str[i] > 32 && str[i] < 127){ 
            words[word][chars++] = str[i];
        } else {
            words[word][chars] = '\0';
            word++; 
            chars = 0;
        }
        if(str[i] == '\n') break;
    }
    
    i = -1;
    
    while(++i < word){
        flag = 0;
        int n = -1;
        while(++n < word){
            if(strcmp(words[i], words[n]) == 0){
                flag++;
            }
        }
 
        if(flag < 3){
            n = 0;
            while(words[i][n] != '\0'){
                out_str[out++] = words[i][n++];
            }
            out_str[out++] = ' ';
        }
    }
 
    out_str[out - 1] = '\0';
 
    printf("%s", out_str);
 
    getchar();
 
}
0
101 / 92 / 53
Регистрация: 22.03.2011
Сообщений: 226
30.12.2012, 00:35 3
Лучший ответ Сообщение было отмечено как решение

Решение

Палучите!
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
//#include "stdafx.h"
 
#include <string.h>
#include <stdlib.h>
#include <ctype.h>//isspace()
/*"Для считанной строки S удалите все слова, встречающиеся более двух раз."*/
void del_word(char *p)
{
    while(isspace(*p) && *p!='\0') p++;
    while(!isspace(*p) && *p!='\0') 
        *p++=' ';
}
 
int main()
{
    char *str,buf[100],buf1[100],*wordnext;
    int count=0,count_rez=0,count_while=0,count_first=0;
    
    char da;
    do
    {
    printf("VVesti Luboi simvol\t-\tvvesti stroky dlya ydaleniya odnakovuh slov\n2\t\t-\tEXIT\n>>");
    scanf("%c",&da);
    if(da=='2') break;
    fflush(stdin);
    printf("******************************************************************************\n");
    str=(char*)malloc(100*sizeof(char));
    printf("Vvedite stroky:\n>>");
    fgets(str,100,stdin);
    str[strlen(str)-1]='\0';//\n убрать
    while(*str!='\0')
    {
        wordnext=str;
        if(sscanf(str,"%s",buf)==-1) //если в массиве только пробелы уже..
            break;
        strcpy(buf1,buf);
        while(isspace(*str) && *str!='\0') str++;
        str+=strlen(buf)+1;
        while(isspace(*str) && *str!='\0') str++;
 
        printf("\nYdalyayu...\n>>");
        count=count_rez=count_while=count_first=0;
                        while(*str!='\0')
                        {
                            
                            if(sscanf(str,"%s",buf)==-1)
                                {
                                    while(isspace(*str) && *str!='\0') str++;
                                    continue;
                            }
                            //str+=strlen(buf)+1;
                            while(isspace(*str) && *str!='\0') str++;
 
                            if(strcmp(buf1,buf)==0) 
                            {
                                del_word(str);
                                while(isspace(*str) && *str!='\0') str++;
 
                                count++;
                            }
                            else {
                                str+=strlen(buf)+1;//HHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHH
                            }
                            count_while++; //означает что мы посeтили цикл
                        }
                if(count)
                    {
                        printf("%s ",buf1);
                        del_word(wordnext);
                        count_rez++;
                }
                else if (count_while) str=wordnext+strlen(buf);
                
        //str+=strlen(buf)+1;
        while(isspace(*str) && *str!='\0') str++;
        if(count_while && count_rez) //если мы не посетили цикл, то программа закончила работу, и нужно выйти
        str=wordnext;
    }
    if(!count_rez) printf("nechego bol'she ydalyat' dlya danoi stroki.\n");
    while (*str!=-3)str--;//отмотать на начало
    printf("Stroka posle obrabotki\n>><%s>\n",str);
 
    printf("^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n\n\n");
    }while (true);
    return 0;
}
0
Миниатюры
Для считанной строки S удалите все слова, встречающиеся более двух раз  
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
30.12.2012, 00:35

Заказываю контрольные, курсовые, дипломные работы и диссертации здесь.

Написать функцию, которая выводит на экран все слова заданной строки, в которой заданная буква входит N или более раз
Написать функцию, которая выводит на экран все слова заданной строки, в которой заданная буква...

Вывести только те слова из строки, которые встречаются более n раз
Дан код, в программировании я новичок, поэтому код вероятно тупой, но все же. Как я понимаю,...

Файлы: из считанной строки S удалите все слова, встречающиеся более двух раз
Для считанной строки S удалите все слова, встречающиеся более двух раз. Хотелось бы увидеть...

Дан текстовый файл. Преобразовать его, удалив из каждой строки слова, встречающиеся более двух раз.
Дан текстовый файл. Преобразовать его, удалив из каждой строки слова, встречающиеся более двух раз.


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

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

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