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

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

04.12.2009, 13:48. Показов 4843. Ответов 11
Метки нет (Все метки)

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
#include<iostream>
#include<cstring>
#include <iomanip>
using namespace std;
int main()
{
   int counter=0, z=0, x=0;
   char str3[100], str7[100];
 
                    cout<<"Введите первое предложение: ";
                    gets(str3);
                    cout<<"Введите второе предложение: ";
                    gets(str7);
 
    char razmer1[300][300], razmer2[300][300], q[2]=" ";
    
        for (int i=0; i<strlen(str3); i++)
        {
            if (str3[i]!=q[0])
            {
                razmer1[z][x]=str3[i];
                x++;
            }
            else
            {
                razmer1[z][x+1]=0;
                x=0;
                z++;
            }
        }
        z=0;
        x=0;
        for (int i=0; i<strlen(str7); i++)
        {
            if (str7[i]!=q[0])
            {
                razmer2[z][x]=str7[i];
                x++;
            }
            else
            {
                razmer2[z][x+1]=0;
                x=0;
                z++;
            }
        }
}
А вот что дальше даже не представляю...
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
04.12.2009, 13:48
Ответы с готовыми решениями:

Вывести два предложения и распечатать самые длинные слова, общие для этих предложений
Здравствуйте. Мне необходима помощь (консультация) на счёт задачи: Вывести два предложения и...

Распечатать самые длинные слова, общие для двух предложений
Ввести два предложения(с помощью char) и распечатать самые длинные слова, общие для этих...

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

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

11
5 / 5 / 0
Регистрация: 07.06.2009
Сообщений: 62
05.12.2009, 13:04  [ТС] 2
Неужели никто не поможет?(((
0
Платежеспособный зверь
8924 / 4352 / 1642
Регистрация: 28.10.2009
Сообщений: 11,567
30.12.2009, 03:32 3
а зачем тебе двумерный массив? не проще создать два одномерных и перебором обоих найти слова, встречающиеся в обоих массивах. заносим их в третий массив и ищем наибольший элемент (длину)
ps я в си ни бум-бум, но на паскале я решал бы именно так
0
5 / 5 / 0
Регистрация: 07.06.2009
Сообщений: 62
10.01.2010, 12:50  [ТС] 4
Одно из заданий в лабе, никак сделать не могу...
Ввести два предложения и распечатать самые длинные слова, общие для этих предложений. Если нужных слов нет - сообщить об этом.
Помогите, срочно надо.
0
MCSD: APP BUILDER
8794 / 1073 / 104
Регистрация: 17.06.2006
Сообщений: 12,602
10.01.2010, 13:05 5
для этого тебе понадобятся такие функции:

ввод строк - gets, fgets
разбивка строки на слова - strtok
длина слова - strlen
0
5 / 5 / 0
Регистрация: 07.06.2009
Сообщений: 62
10.01.2010, 13:09  [ТС] 6
Можете привести пример использования strtok? Например если дана строка str, как её разбить на слова и кинуть в массив?
0
591 / 357 / 16
Регистрация: 06.02.2009
Сообщений: 1,386
10.01.2010, 13:13 7
Цитата Сообщение от Kemsit Посмотреть сообщение
Например если дана строка str, как её разбить на слова и кинуть в массив?
C
1
2
3
4
5
6
7
8
char *str = "This is test";
char *token;
token = strtok(str, " ");
while(token != NULL)
{
    printf("%s", token);
    token = strtok(NULL, " ");
}
1
MCSD: APP BUILDER
8794 / 1073 / 104
Регистрация: 17.06.2006
Сообщений: 12,602
10.01.2010, 13:15 8
Kemsit,

Можете привести пример использования strtok? Например если дана строка str, как её разбить на слова и кинуть в массив?

если не считать что программа падает, смотри пример от RazorQ,
1
591 / 357 / 16
Регистрация: 06.02.2009
Сообщений: 1,386
10.01.2010, 13:22 9
Цитата Сообщение от Rififi Посмотреть сообщение
если не считать что программа падает
где?

Добавлено через 5 минут
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
#include <stdio.h>
 
int main()
{
    char str[] = "This is test";
    char *token;
    token = strtok(str, " ");
    while(token != NULL)
    {
        printf("%s\n", token);
        token = strtok(NULL, " ");
    }
    return 0;
}
1
5 / 5 / 0
Регистрация: 07.06.2009
Сообщений: 62
10.01.2010, 13:28  [ТС] 10
C++
1
2
3
4
5
6
7
8
9
10
token1 = strtok(str3, " ");
    while(token1 != NULL)
    {
        token1 = strtok(NULL, " ");
    }
    token2 = strtok(str7, " ");
    while(token2 != NULL)
    {
        token2 = strtok(NULL, " ");
    }
посоветуйте, как лучше сравнить чтоб найти эти слова
0
591 / 357 / 16
Регистрация: 06.02.2009
Сообщений: 1,386
10.01.2010, 13:36 11
Kemsit, во-первых, какой тип у token1 token2 и token3? Во-вторых, прочитай документацию по strtok и всё станет понятным. Вкратце, при первом вызове в функцию передается строка для разбиения на токены и символы-делители. При следующих вызовах, если мы хотим разбить ту же строку, то мы передаем первым аргументом NULL. При удачном разбиении функция вернет первый токен. В случае неудачи функция возвращает NULL - поэтому мы в цикле поставили условие token != NULL
0
Модератор
Эксперт PythonЭксперт JavaЭксперт CЭксперт С++
12454 / 7479 / 1752
Регистрация: 25.07.2009
Сообщений: 13,755
10.01.2010, 15:01 12
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
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
    
/* Ввести два предложения и распечатать самые длинные слова, общие для этих предложений. */
 
int wrdLenDescCmp(const void *a, const void *b){
    return strlen(*(char**)b) - strlen(*(char**)a);
}
 
char **strToWords(char *s, const char *delim, int *count){
    char **wa = NULL, *p = NULL;
    *count = 0;
    for ( p = strtok(s, delim); p != NULL; p = strtok(NULL, delim) ){
        if ( ( wa = (char**)realloc(wa, sizeof(char*) * (*count + 1)) ) == NULL ){
            perror("Bad memory!\n");
            exit(1);
        }
        if ( ( wa[*count] = strdup(p) ) == NULL ){
            perror("Bad memory!\n");
            exit(1);
        }
        *count += 1;
    }
    return wa;
}
 
#define STRLEN 128
#define SPCHARS " ,.:;!?\t\n"
int main(void){
    char str1[STRLEN], str2[STRLEN], **words1, **words2;
    int wcnt1, wcnt2, i, j, found;
    
    printf("Str1: ");
    if ( !fgets(str1, STRLEN, stdin) )
        exit(1);
    printf("Str2: ");
    if ( !fgets(str2, STRLEN, stdin) )
        exit(1);
    
    words1 = strToWords(str1, SPCHARS, &wcnt1);
    words2 = strToWords(str2, SPCHARS, &wcnt2);
    if ( !words1 || !words2 || !wcnt1 || !wcnt2 ){
        fprintf(stderr, "Shit happens!\n");
        exit(1);
    }
    qsort(words1, wcnt1, sizeof(char*), wrdLenDescCmp);
    qsort(words2, wcnt2, sizeof(char*), wrdLenDescCmp);
    
    found = 0;
    for ( i = 0; i < wcnt1 && !found; ++i ){
        for ( j = 0; j < wcnt2; ++j ){
            if ( !strcmp(words1[i], words2[j]) ){
                printf("%s\n", words1[i]);
                found = 1;
                break;
            }
        }
    }
    if ( !found )
        printf("No same words found!\n");
    
    for ( i = 0; i < wcnt1; ++i ){
        if ( words1[i] != NULL ){
            free(words1[i]);
            words1[i] = NULL;
        }
    }
    free(words1);
    words1 = NULL;
    for ( i = 0; i < wcnt2; ++i ){
        if ( words2[i] != NULL ){
            free(words2[i]);
            words2[i] = NULL;
        }
    }
    free(words2);
    words2 = NULL;
    exit(0);
}
0
10.01.2010, 15:01
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
10.01.2010, 15:01
Помогаю со студенческими работами здесь

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

Дано два предложения (Распечатать слова из первого предложения, который начинаются на первую букву последнего слова второго предложения)
Дано два предложения. Распечатать: - слова из первого предложения, который начинаются на первую...

Сравнить два предложения и вывести на экран одинаковые буквы этих предложений
Вводятся 2 предложения. Их надо сравнить и вывести на экран одинаковые буквы этих предложений....

В заданом тексте найти самые короткие и самые длинные слова.
В заданом тексте найти самые короткие и самые длинные слова. Если можно, то с блок-схемкой


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

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

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