0 / 0 / 0
Регистрация: 11.07.2011
Сообщений: 8
1

Распечатать самые длинные слова

11.07.2011, 17:02. Показов 2691. Ответов 3
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Ввести два предложения и распечатать самые длиные слова, общие для этих предложений. Если нужных слов нет - сообщить об этом
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
#include<stdio.h>
#include<string.h>
void main()
{
    char str1[80],str2[80];
    int i,k_max,kol_2=0,kol_1=0,p_max,kol_max=-1000,kol1_max=-1000;
    printf("\n Vvedite 1 predlogenie\n");
    gets(str1);
    
    while(str1[i]!='\0')
    {
        while(str1[i]!=' ')
        
        {
            kol_2++;
        }
        if(kol_2>kol_max)
        {
            kol_max=kol_2;
            k_max=i-kol_max;
        }
        i++;
        kol_2=0;
    }
        for(i=k_max;i<kol_max+k_max;i++)
            printf("%c\n",str1[i]);
    
    printf("\n Vvedite 2 predlogenie\n"); 
    gets(str2);
        while(str2[i]!='\0')
    {
        while(str2[i]!=' ')
        
        {
            kol_1++;
        }
        if(kol_1>kol1_max)
        {
            kol1_max=kol_1;
            p_max=i-kol1_max;
        }
        i++;
        kol_1=0;
    }
        for(i=p_max;i<kol_max+p_max;i++)
            printf("%c\n",str2[i]);
    
 
 
    printf("\n Sammye dlinye slova:\n");
    for(i=kol_2;i<=k_max;i++)
    {
        if(k_max!=0)
        printf("%s",str1);
        else ("\n Ux net");
    }
    for(i=kol_1;i<=p_max;i++)
    {
    if(p_max!=0)
    printf("%s",str2);
    else ("\n Ux net");
    }
}
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
11.07.2011, 17:02
Ответы с готовыми решениями:

Распечатать все самые длинные слова предложения
Словом назовем всякую последовательность букв латинского алфавита длины не более 20. Пред-...

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

Поменять местами самые короткие и самые длинные слова в тексте
В файле есть текст. Определены самое короткое и самое длинное слова. Нужно поменять их местами в...

Дан текстовый файл. Вывести в другой файл самые длинные слова текста
Дан текстовый файл. Вывести в другой файл самые длинные слова текста (с учетом знаков препинания,...

3
Каратель
Эксперт С++
6609 / 4028 / 401
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
11.07.2011, 19:45 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
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
 
#define MAX_TOKENS 100
 
int main() 
{
    printf("Enter two sentences: ");
    char str[80] = { 0 };
    fgets(str, 80, stdin);
    fflush(stdin);
 
    char* snt[2] = { strtok(str, "."), strtok(NULL, ".") };
    char* token[2][MAX_TOKENS] = { NULL };
    char* ptr = NULL;
    int i, j, tokens[2];
 
    for (i = 0; i < 2; ++i)
    {
        ptr = strtok(snt[i], " \t\n,");
        for (j = 0; ptr != NULL && i < MAX_TOKENS; 
             ptr = strtok(NULL, " \t\n"), ++j)
        {
            token[i][j] = (char*)malloc((strlen(ptr) + 1) * sizeof(char));
            memcpy(token[i][j], ptr, (strlen(ptr) + 1) * sizeof(char));
        }
        tokens[i] = j;
    }
 
    int matches;
 
    char* match[MAX_TOKENS] = { NULL };
    for (i = 0, matches = 0; i < tokens[0]; ++i)
    {
        for (j = 0; j < tokens[1]; ++j)
        {
            if (!strcmp(token[0][i], token[1][j]))
            {
                match[matches++] = token[1][i];
            }
        }
    }
    
    if(!matches)
    {
        printf("Matches not found.");
    }
    else
    {
        printf("Matches:\n");
        char* max_len_str[MAX_TOKENS] = { match[0] };
        size_t max_len = strlen(max_len_str[0])
               , k = 1;
        for(i = 1; i < matches; ++i)
        {
            size_t len = strlen(match[i]);
            if (len >= max_len)
            {
                max_len = len;
                max_len_str[k++] = match[i];
            }
        }
 
        for (i = 0; i < k; ++i)
        {
            printf("\t%s\n", max_len_str[i]);
        }
    }
 
    for (i = 0; i < tokens[0]; ++i)
    {
        free(token[0][i]);
    }
    for (i = 0; i < tokens[1]; ++i)
    {
        free(token[1][i]);
    }
    getchar();
    return 0;
}
1
237 / 210 / 29
Регистрация: 08.06.2011
Сообщений: 467
11.07.2011, 19:57 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
87
88
89
90
91
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
 
#define MAX_SNT_LEN 512
#define DELIM "\n\t .,:;!?(){}"
 
#define STREQ(str1, str2) (strcmp((str1), (str2)) == 0) 
 
char **get_tokens_dup(char *src, const char *delim)
{
    size_t cnt;
    char  *word;
    char **result = NULL;
 
    for(word = strtok(src, delim), cnt = 1;
        word;
        word = strtok(NULL, delim))
    {
        if ((result = (char **) realloc(result,
            ++cnt * sizeof(char *))) == NULL)
        {
            fputs("Can't allocate memory\n", stderr);
            exit(1);
        }
        if ((result[cnt - 2] = strdup(word)) == NULL) {
            fputs("Can't duplicate word\n", stderr);
            exit(2);
        }
    }
    result[cnt-- - 1] = NULL;
    return result;
}
 
int main()
{
    char snt1[MAX_SNT_LEN];
    char snt2[MAX_SNT_LEN];
    char **snt1_words;
    char **snt2_words;
    char **p1, **p2;
    char **intersection = NULL;
    size_t cnt = 0;
    size_t max_len = 0;
 
    printf("Enter a first sentence: ");
    fgets(snt1, MAX_SNT_LEN, stdin);
    printf("Enter a second sentence: ");
    fgets(snt2, MAX_SNT_LEN, stdin);
 
        snt1_words = get_tokens_dup(snt1, DELIM);
    snt2_words = get_tokens_dup(snt2, DELIM);
 
    for (p1 = snt1_words; *p1 != NULL; ++p1) {
        for (p2 = snt2_words; *p2 != NULL; ++p2)
            if (STREQ(*p1, *p2)) {
                if ((intersection = (char **) realloc(intersection,
                    ++cnt * sizeof(char *))) == NULL) 
                {
                    fputs("Can't allocate memory\n", stderr);
                    exit(1);
                }
                intersection[cnt - 1] = *p1;
                if (strlen(*p1) > max_len)
                    max_len = strlen(*p1);
            }
    }
    if (0 == cnt) {
        printf("There aren't common words.\n");
        exit(0);
    }
 
    printf("Common words with max length:\n");
    for (size_t i = 0; i < cnt; ++i) {
        if (strlen(intersection[i]) == max_len)
            printf("%s\n", intersection[i]);
    }
    free(intersection);
 
    for (p1 = snt1_words; *p1 != NULL; ++p1)
        free(*p1);
    free(*p1);
    free(snt1_words);
 
    for (p2 = snt2_words; *p2 != NULL; ++p2)
        free(*p2);
    free(*p2);
    free(snt2_words);
 
    exit(0);
}
1
Jupiter
11.07.2011, 19:59     Распечатать самые длинные слова
  #4

Не по теме:

Цитата Сообщение от Net_Wanderer Посмотреть сообщение
:;!?(){}
эх, все время про эту пунктуацию забываю;)

0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
11.07.2011, 19:59

Найти номера строк заданной целочисленной матрицы размером n*n, в которых находятся самые длинные серии
Найти номера строк заданной целочисленной матрицы размером n*n, в которых находятся ...

Найти и вывести все длинные слова предложения
У меня выводится только одно длинное слово. Как быть если их несколько. char s; char *ptr,*p; int...

Какие есть самые лучшие алгоритмы сортировки, самые быстрые?
Подскажите пожалуйста, какие есть самые лучшие алгоритмы сортировки, самые быстрые. Например есть...

В строках, где есть определённая комбинация разделителей, поменять местами самые большое и маленькое слова
И снова здравствуйте) Мне необходимо в строках, где есть определённая комбинация разделителей...


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru