Форум программистов, компьютерный форум, киберфорум
C для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.54/13: Рейтинг темы: голосов - 13, средняя оценка - 4.54
136 / 2 / 6
Регистрация: 04.07.2015
Сообщений: 122
1

Подсчитать количество слов в строке, вывести на экран слова минимальной и максимальной длины

26.09.2015, 18:39. Показов 2480. Ответов 4
Метки нет (Все метки)

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

Добавлено через 5 минут
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
char * str = (char *)malloc(50 * sizeof(char));
    strcpy(str, "Life long enought to find the right one");
 
    char * token = strtok(str, " ");
    int  count = 0;
 
    char ** mas = (char **)malloc(25 * sizeof(char*));
 
    while (token != NULL)
    {
        mas[count] = (char *)malloc((strlen(token) + 1) * sizeof(char));
        strcpy(mas[count], token);
        count++;
        token = strtok(NULL, " ");
 
    }
 
    printf("В строке %d слов", count);
    return 0;
}
Пока подсчет слов с троке
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
26.09.2015, 18:39
Ответы с готовыми решениями:

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

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

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

Дана строка символов. Определить, сколько слов стоит до слова максимальной длины.
Дана строка символов. Определить, сколько слов стоит до слова максимальной длины. нужно написать...

4
Модератор
Эксперт PythonЭксперт JavaЭксперт CЭксперт С++
11046 / 6993 / 1656
Регистрация: 25.07.2009
Сообщений: 12,763
26.09.2015, 20:33 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
#include <stdio.h>
#include <glib.h>
#include <string.h>
 
#define DELIM " ,.!?:;-\t\n"
 
int strlen_cmp(const void * a, const void * b) {
    return strlen(*(const char**)a) - strlen(*(const char**)b);
}
 
int main(void) {
    char buf[BUFSIZ];
    
    while ( printf("String: ") && fgets(buf, BUFSIZ, stdin) && *buf != '\n' ) {
        char ** tokens = g_strsplit_set(buf, DELIM, -1);
        GPtrArray * words = g_ptr_array_new();
        
        for ( char ** pTok = tokens; *pTok; ++pTok )
            if ( **pTok )
                g_ptr_array_add(words, *pTok);
        
        if ( ! words->len )
            printf("No words found in that string!\n");
        else {
            printf("%d words\n", words->len);
            
            g_ptr_array_sort(words, strlen_cmp);
            int shortestLen = strlen((const char*)g_ptr_array_index(words, 0));
            int longestLen = strlen((const char*)g_ptr_array_index(words, words->len - 1));
            
            printf("Shortest word(s):\n");
            for ( int i = 0; i < words->len && strlen((const char*)g_ptr_array_index(words, i)) == shortestLen; ++i )
                printf("%s\n", (const char*)g_ptr_array_index(words, i));
            printf("Longest word(s):\n");
            for ( int i = words->len - 1; i >= 0 && strlen((const char*)g_ptr_array_index(words, i)) == longestLen; --i )
                printf("%s\n", (const char*)g_ptr_array_index(words, i));
        }
        
        g_ptr_array_free(words, TRUE);
        g_strfreev(tokens);
        
        printf("\n");
    }
    
    return 0;
}
Код
andrew@debppc:~/workspace/c/glib$ gcc -std=c99 words.c `pkg-config glib-2.0 --cflags --libs`
andrew@debppc:~/workspace/c/glib$ ./a.out 
String: any many money more
4 words
Shortest word(s):
any
Longest word(s):
money

String: 
andrew@debppc:~/workspace/c/glib$
0
136 / 2 / 6
Регистрация: 04.07.2015
Сообщений: 122
26.09.2015, 21:41  [ТС] 3
Офигеть)) половина не понятна)

Добавлено через 1 час 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
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
int _tmain(int argc, _TCHAR* argv[])
{
    setlocale(LC_ALL, "rus");
 
    char * str = (char *)malloc(50 * sizeof(char));
    strcpy(str, "Life long enought to find the right one.");
 
    char * token = strtok(str, " ,.");
    char ** mas = (char **)malloc(25 * sizeof(char*));// создание двумерного массива
    int count;
 
    while (token != NULL)
    {
        mas[count] = (char *)malloc((strlen(token) + 1) * sizeof(char));//расширяем на длину слова+1
        strcpy(mas[count], token);
        count++;
        token = strtok(NULL, " ,.");
 
    }
 
    for (int i = 0; i < count; ++i)
    {
        int curr_len = strlen(mas[i]);//текущая длина
        int min = i;
        for (int j = i + 1; j < count; j++)
        {
            if (strlen(mas[j]) < curr_len)
                min = j;
        }
        if (min != curr_len)//если минимум не совпадает с текущим, то делаем обмен
        {
            char *temp = (char*)malloc(curr_len*sizeof(char));
            strcpy(temp, mas[i]);       //копируем во временнную строку элемент с текущей длиной
 
 
            char*temp2 = (char*)realloc(mas[i], strlen(mas[i]) * sizeof(char));
            if (temp2 != NULL)
                mas[i] = temp2;
            strcpy(mas[i], mas[min]);//копируем строку
 
            temp2 = (char*)realloc(mas[min], strlen(temp) * sizeof(char));
            if (temp2 != NULL)
                mas[i] = temp2;
            strcpy(mas[min], temp);
 
        }
    }
 
    for (int i = 0; i < count; i++)
        puts(mas[i]);
 
    return 0;
}
Программа отваливается на сортировке. Не могу ошибку найти
0
824 / 627 / 940
Регистрация: 26.06.2015
Сообщений: 1,409
27.09.2015, 11:00 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
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
#include <stdio.h>
#include <string.h>
#include <ctype.h>
#include <locale.h>
#ifndef __GNUC__
#include <windows.h>
#endif
 
//кол-во слов
unsigned count_words(const char* s){
    unsigned n = 0;
    const unsigned char* p = (const unsigned char*)s;
    while(*p){
        if(isalpha(*p) && ! isalpha(*(p + 1)))
            ++n;
        ++p;
    }
    return n;
}
 
//получение слова
char* each_word(char** s){
    unsigned char* i, *p = (unsigned char*)*s;
    while(*p){
        while(*p && ! isalpha(*p))
            ++p;
 
        i = p;
        while(isalpha(*i))
            ++i;
 
        if(i > p){
            if(*i)
                *i++ = '\0';
            *s = (char*)i;
            return (char*)p;
        }
        p = i;
    }
    return NULL;
}
 
int main(void){
    size_t n, na, nb;
    char*  t, *p, *wa, *wb;
 
    char s[] = "Тополь, ель, сосна, кедр, берёза, липа, осина.";
 
    setlocale(LC_CTYPE, "Russian_Russia.1251");
 
    printf("count words: %u\n", count_words(s));
 
    p  = &s[0];
    wa = wb = each_word(&p);
    if(wa == NULL)
        return 1;
 
    na = nb = strlen(wa);
    while((t = each_word(&p)) != NULL){
        n = strlen(t);
        if(n > na){
            na = n;
            wa = t;
        }
        if(n < nb){
            nb = n;
            wb = t;
        }
    }
    
#ifndef __GNUC__
    CharToOemA(wa, wa);
    CharToOemA(wb, wb);
#endif
    printf("min word: %s\n", wb);
    printf("max word: %s\n", wa);
    return 0;
}
0
136 / 2 / 6
Регистрация: 04.07.2015
Сообщений: 122
27.09.2015, 16:45  [ТС] 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
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
int _tmain(int argc, _TCHAR* argv[])
{
    setlocale(LC_ALL, "rus");
    printf("Исходная строка\n\n");
    char * str = (char *)malloc(50 * sizeof(char));
    strcpy(str, "Life long enought to find the right one");
    puts(str);
    char * token = strtok(str, " ");
    int  count = 0;
 
    char ** mas = (char **)malloc(25 * sizeof(char*));
 
    while (token != NULL)
    {
        mas[count] = (char *)malloc((strlen(token) + 1) * sizeof(char));
        strcpy(mas[count], token);
        count++;
        token = strtok(NULL, " ");
 
    }
 
    printf("В строке %d слов\n", count);
 
    int max = strlen(mas[0]), index_max_len = 0;
 
    for (int i = 1; i<count; i++)//поиск максимума
    if (strlen(mas[i]) > max)//количество символов в строке до первого вхождения символа конца строки
    {
        max = strlen(mas[i]);
        index_max_len = i;
    }
    printf("Максимальное слово = %s (длина = %d символов)\n", mas[index_max_len], max);
 
    
    int min = strlen(mas[0]), index_min_len = 0;
 
    for (int i = 1; i<count; i++)//поиск минимума
    if (strlen(mas[i]) <= min)
    {
        min = strlen(mas[i]);
        index_min_len = i;
    }
    printf("Минимальное слово = %s (длина = %d символов)\n", mas[index_min_len], min);
    
    printf("\n");
    char * tmp = (char *)malloc((max + 1) * sizeof(char));// замена максимального слова на минимальное
    strcpy(tmp, mas[index_max_len]);
    strcpy(mas[index_max_len], mas[index_min_len]);
    strcpy(mas[index_min_len], tmp);
    strcpy(str, "");
 
    printf("Результирующая строка\n\n");
 
    for (int i = 0; i<count; i++)
    {
        strcat(str, mas[i]);
        strcat(str, " ");
    }
    puts(str);
    printf("\n");
    return 0;
}
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
27.09.2015, 16:45

Во введенном тексте подсчитать количество символов в слове максимальной длины
Во введенном тексте подсчитать количество символов в слове максимальной длины. (Слова разделяются...

Разбить строку на слова и вывести количество повторений этих слов в строке
Слова разделены пробелами

Найти и вывести на печать слова максимальной длины
1. В произвольном тексте, содержащем не более 10 строк, в каждой строке не более 80 символов, найти...

Функции: Определить и вывести на экран слово максимальной длины
SOS!!Помогите решить с обьяснением!!! Необходимо разработать программу согласно варианту...


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

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

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