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

Выписать слова, которые есть в двух текстах

22.10.2012, 14:41. Просмотров 684. Ответов 3
Метки нет (Все метки)

Задано два текста, слова которых разделены пробелами и знаками препинания. Написать программу, которая создает третий текст из слов первого, которые входят во второй текст и разделяет их пробелами.
Помогите, пожалуйста. Работать с char не умею вообще.Объясните как сделать или напишите программу, умоляю
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
22.10.2012, 14:41
Ответы с готовыми решениями:

Дано два слова. Выписать буквы, которые есть и в 1-м, и во 2-м слове
Дано два слова. Выписать буквы, которые есть и в 1-м, и во 2-м слове.

(есть наработки)Напечатать те слова, которые встречаются в каждом из двух заданных предложений
Не могу найти ошибку в алгоритме,помогите. "Напечатать те слова, которые встречаются в каждом из...

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

Напечатать слова из двух заданных предложений, которые есть только в одном из них (в том числе повторяющиеся)
Даны два предложения. Напечатать слова, которые есть только в одном! Из них (из них в том числе...

__________________
3
Модератор
Эксперт PythonЭксперт JavaЭксперт CЭксперт С++
10910 / 6836 / 1625
Регистрация: 25.07.2009
Сообщений: 12,540
22.10.2012, 16:54 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
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
89
90
91
92
93
94
95
96
97
98
99
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
 
typedef struct NODE {
    const char * wrd;
    struct NODE * left;
    struct NODE * right;
} node_t;
 
int add_node(node_t ** ppRoot, const char * pWord) {
    if ( ! *ppRoot ) {
        if ( ! ( *ppRoot = malloc(sizeof(node_t)) ) )
            return -1;
        
        (*ppRoot)->wrd = pWord;
        (*ppRoot)->left = NULL;
        (*ppRoot)->right = NULL;
        
        return 0;
    }
    else {
        int cmp = strcmp((*ppRoot)->wrd, pWord);
        
        return ( cmp > 0 ) ? add_node(&((*ppRoot)->left), pWord) :
            ( cmp < 0 ) ? add_node(&((*ppRoot)->right), pWord) : 0;
    }
}
 
void to_string(const node_t * pRoot, char * buf) {
    if ( pRoot->left )
        to_string(pRoot->left, buf);
    strcat(buf, pRoot->wrd);
    strcat(buf, " ");
    if ( pRoot->right )
        to_string(pRoot->right, buf);
}
 
int have_word(const node_t * pRoot, const char * pWord) {
    if ( ! pRoot )
        return 0;
    else {
        int cmp = strcmp(pRoot->wrd, pWord);
        
        return ( cmp > 0 ) ? have_word(pRoot->left, pWord) :
            ( cmp < 0 ) ? have_word(pRoot->right, pWord) : 1;
    }
}
 
void delete_all(node_t ** ppRoot) {
    if ( *ppRoot ) {
        delete_all(&((*ppRoot)->left));
        delete_all(&((*ppRoot)->right));
        free(*ppRoot);
        *ppRoot = NULL;
    }
}
 
#define DELIM " ,.!?-\t\n"
 
int main(void) {
    char sFirst[BUFSIZ], sSecond[BUFSIZ], sResult[BUFSIZ];
    
    while ( printf("First: ") && fgets(sFirst, BUFSIZ, stdin) && *sFirst != '\n'
           && printf("Second: ") && fgets(sSecond, BUFSIZ, stdin) && *sSecond != '\n' ) {
        
        node_t * pTree, * pRes;
        char * pWord;
        
        for ( pTree = NULL, pWord = strtok(sFirst, DELIM); pWord; pWord = strtok(NULL, DELIM) ) {
            if ( add_node(&pTree, pWord) ) {
                fprintf(stderr, "Memory error!\n");
                exit(1);
            }
        }
        
        for ( pRes = NULL, pWord = strtok(sSecond, DELIM); pWord; pWord = strtok(NULL, DELIM) ) {
            if ( have_word(pTree, pWord) ) {
                if ( add_node(&pRes, pWord) ) {
                    fprintf(stderr, "Memory error!\n");
                    exit(1);
                }
            }
        }
        
        if ( pRes ) {
            *sResult = '\0';
            to_string(pRes, sResult);
            printf("Same words: %s\n", sResult);
        }
        else
            printf("No same words.\n");
        
        delete_all(&pTree);
        delete_all(&pRes);
    }
    
    exit(0);
}
1
46 / 46 / 18
Регистрация: 25.10.2011
Сообщений: 183
27.10.2012, 16:59  [ТС] 3
Код рабочий, спасибо. Но для начинающего не подойдет никак ) мне нужно будет еще блок-схему нарисовать к такой фигне, да и условие добавили - из всех функций можно использовать только strlen. Попытался написать, нужно нечто вроде такого, только рабочее :
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
#include <stdio.h>
#include <conio.h>
#include <string.h>
#define true 1;
#define false 0;
int main(int argc, char* argv[])
{
        char txt1[1000],txt2[1000];
        unsigned int i=0,j=0,k=0,len1=0,len2=0;
        unsigned short int T;
        printf("Input first text:\n");
        gets(txt1); txt1[strlen(txt1)]=' ';
        printf("Input second text:\n");
        gets(txt2);
        printf("------------------\n");
        printf("Same words:\n");
        while (i<=strlen(txt1)){
                if ((txt1[i]!='!')&&(txt1[i]!='?')&&(txt1[i]!='!')
                &&(txt1[i]!='.')&&(txt1[i]!=',')&&(txt1[i]!='/"')
                &&(txt1[i]!=' ')){
                        len1++;
                        i++;
                } else {
                        while (j<=strlen(txt2)){
                                if ((txt2[j]!='!')&&(txt2[j]!='?')&&(txt2[j]!='!')
                                &&(txt2[j]!='.')&&(txt2[j]!=',')&&(txt2[j]!='/"')
                                &&(txt1[j]!=' ')){
                                        len2++;
                                        j++;
                                } else {
                                                j++;
                                                T=true;
                                                if (len1==len2){
                                                        for(k=0;k<len1;k++){
                                                                if(txt1[k+i-len1]!=txt2[k+j-len2])
                                                                        T=false;
                                                        }
                                                } else T=false;
                                                if (T) {
                                                        for(k=0;k<len1;k++)
                                                                printf("%c",txt1[k+i-len1]);
                                                        printf(" ");
                                                }
                                        len2=0;
                                        }
                        }
                       len1=0;
                       i++;
                       j=0;
                 }
        }
        getch();
        return 0;
}
0
46 / 46 / 18
Регистрация: 25.10.2011
Сообщений: 183
14.11.2012, 17:03  [ТС] 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
54
55
56
57
58
59
60
61
#include <stdio.h>
#include <conio.h>
#include <string.h>
#define true 1;
#define false 0;
int main(int argc, char* argv[])
{
        char txt1[1000],txt2[1000];
        unsigned int i=0,j=0,k=0,len1=0,len2=0,sl1,sl2;
        unsigned short int T;
        printf("Input first text:\n");
        gets(txt1);
        sl1=strlen(txt1);
        txt1[sl1++]=' ';
        txt1[sl1]='\0';
        printf("Input second text:\n");
        gets(txt2);
        sl2=strlen(txt2);
        txt2[sl2++]=' ';
        txt2[sl2]='\0';
        printf("------------------\n");
        printf("Same words:\n");
        while (i<sl1){
                if ((txt1[i]!='!')&&(txt1[i]!='?')&&(txt1[i]!='!')
                &&(txt1[i]!='.')&&(txt1[i]!=',')&&(txt1[i]!='\"')
                &&(txt1[i]!=' ')){
                        len1++;
                        i++;
                } else {
                        while (j<sl2){
                                if ((txt2[j]!='!')&&(txt2[j]!='?')&&(txt2[j]!='!')
                                &&(txt2[j]!='.')&&(txt2[j]!=',')&&(txt2[j]!='\"')
                                &&(txt2[j]!=' ')){
                                        len2++;
                                        j++;
                                } else {
                                                T=true;
                                                if (len2==0) T=false;
                                                if (len1==len2){
                                                        for(k=0;k<len1;k++){
                                                                if(txt1[k+i-len1]!=txt2[k+j-len2])
                                                                        T=false;
                                                        }
                                                } else T=false;
                                                if (T) {
                                                        for(k=0;k<len1;k++)
                                                                printf("%c",txt1[k+i-len1]);
                                                        printf(" ");
                                                }
                                                j++;
                                                len2=0;
                                        }
                        }
                        j=0;
                        len1=0;
                        i++;
                 }
        }
        getch();
        return 0;
}
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
14.11.2012, 17:03

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

Найти и выписать те слова , которые начинаются и заканчиваются одной и той же цифрой
помогите Дана задача: дана строка, состоящая из цифр разделенных латинскими...

Выписать все слова, которые входят в данный текст по несколько раз.
Выписать все слова, которые входят в данный текст по несколько раз.

Выписать все слова, которые являются анаграммами друг для друга
Анагра́мма (от греч. ανα- — «пере» и γράμμα — «буква») — литературный приём, состоящий в...

Вывести слова строки, которые отличны от последнего слова, и определить, есть ли в данной строке одинаковые слова
Дана строка, состоящая из слов, разделённых пробелами. Вывести слова этой строки, которые отличны...


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

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

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