Форум программистов, компьютерный форум CyberForum.ru
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
cmpunk
5 / 1 / 1
Регистрация: 19.01.2011
Сообщений: 34
#1

Найти в строке слово-перевертыш максимальной длины - C++

01.11.2011, 00:15. Просмотров 776. Ответов 4
Метки нет (Все метки)

Дана строка в виде предложения. Найти в ней слово-перевертыш максимальной длинны. Словом будем считать набор символов, отделенных с двух сторон пробелами.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
01.11.2011, 00:15
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Найти в строке слово-перевертыш максимальной длины (C++):

Найти в функции в строке слово максимальной длины - C++
Ввести строку. Найти в функции в ней слово максимальной длины.

В строке, состоящей из слов и знаков препинания, найти слово максимальной длины - C++
В строке, состоящей из слов и знаков препинания (пробел . : , ! ?-;), найти слово максимальной длины; Программа должна обрабатывать...

В строке, состоящей из слов и знаков препинания (пробел . : , ! ?-;), найти слово максимальной длины - C++
Помогите пожалуйста составить программу !!! вот условие В строке, состоящей из слов и знаков препинания (пробел . : , ! ?-;), найти...

В строке, состоящей из слов и знаков препинания(пробел.:,!?-;),найти слово максимальной длины, не содержащее заданную букву - C++
В строке, состоящей из слов и знаков препинания(пробел.:,!?-;), найти слово максимальной длины, не содержащее заданную букву/

Ввести строку. Найти в функции в ней слово максимальной длины - C++
Как засунуть всю задачу в функцию, так что бы вызвать ее с помощью меню? Задача: Ввести строку. Найти в функции в ней слово максимальной...

Слово максимальной длины заменить на слово минимальной длины - C++
Задача: Создать 2 объекта разработанного класса. Одной из компонент класса является символьная строка. В результате выполнения программы...

4
silent_1991
Эксперт С++
4985 / 3042 / 149
Регистрация: 11.11.2009
Сообщений: 7,027
Завершенные тесты: 1
01.11.2011, 03:09 #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
#include <stdio.h>
#include <string.h>
 
#define BUF_SIZE 512
 
int is_palindrome(const char *begin, const char *end)
{
    while (begin <= end)
        if (*begin++ != *end--)
            return 0;
        
    return 1;
}
 
int main(void)
{
    FILE *input = fopen("input.txt", "r");
    
    char sentence[BUF_SIZE];
    
    char *ptr = sentence;
    char *end_ptr;
    char *max_pos = NULL;
    
    size_t max_len = 0;
    size_t len;
    
    fgets(sentence, BUF_SIZE, input);
    
    do
    {
        end_ptr = ptr + 1;
        
        while (*end_ptr != ' ' && *end_ptr != '\0')
            ++end_ptr;
        
        --end_ptr;
        
        if (is_palindrome(ptr, end_ptr))
        {
            len = end_ptr - ptr + 1;
            
            if (max_len < len)
            {
                max_len = len;          
                max_pos = ptr;
            }
        }
        
        ptr = end_ptr + 2;
    }
    while (*(ptr - 1) != '\0');
    
    if (max_pos != NULL)
        while (*max_pos != ' ' && *max_pos != '\0')
            printf("%c", *max_pos++);
    
    return 0;
}
1
cmpunk
5 / 1 / 1
Регистрация: 19.01.2011
Сообщений: 34
01.11.2011, 08:17  [ТС] #3
silent_1991 спасибо, но можно бы по проще сделать, что б без файлов и указателей
0
Olga_
842 / 184 / 16
Регистрация: 01.08.2011
Сообщений: 502
01.11.2011, 10:17 #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
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<conio.h>
#define N 1024
 
int Sym(char *s, int i, int j)
{
    for (; i < j && s[i] == s[j]; i++, j--)
        ;
    return i >= j;
}
 
int main()
{
    char s[N], *word, *ps;
    int i = 0, j, i0, j0, max = 0;
    fgets(s, N, stdin);
    if (ps = strchr(s, '\n'))
        *ps = '\0';
    while(s[i])
    {
        while(s[i] && s[i] == ' ')
            i++;
        j = i;
        while(s[i] && s[i] != ' ')
            i++;
        if (Sym(s, j, i - 1) && i - j > max)
        {
            max = i - j;
            i0 = j;
            j0 = i;
        }
    }
    if (max)
    {
        word = (char *)malloc((max+1)*sizeof(char));
        strncpy(word, s + i0, max);
        word[max] = '\0';
        puts(word);
        free(word);
    }
    getch();
    return 0;
}
1
-=ЮрА=-
Заблокирован
Автор FAQ
01.11.2011, 11:07 #5
Цитата Сообщение от cmpunk Посмотреть сообщение
Дана строка в виде предложения. Найти в ней слово-перевертыш максимальной длинны. Словом будем считать набор символов, отделенных с двух сторон пробелами.
- вот простенько и красивенько
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
#include <stdio.h> 
#include <string.h>
#include <stdlib.h>
//Ïðîâåðÿåò ÿâëÿåòñÿ ëè ñëîâî ïåðåâ¸ðòûøåì
//Åñëè ñëîâî - ïåðåâ¸ðòûø, âîçâðГ*ГІ 1 ГЁГ*Г*Г·ГҐ 0
int isBackWord(char * s)
{
    int ret = 1;
    long sLen = strlen(s);
    for(long i = 0; i < sLen/2; i++)
    {
        if(s[i] != s[(sLen - 1) - i])
        {
            ret = 0;
            break;
        }
    }
    return ret;
}
 
int main()
{   
    long sLen;//Áóäåò ñîäåðæГ*ГІГј Гў Г±ГҐГЎГҐ äëèГ*Г*Гі ïåðåâ¸ðòûøГ*
    long mLen = 0;//Áóäåò ñîäåðæГ*ГІГј Гў Г±ГҐГЎГҐ max äëèГ*Г*Гі ïåðåâ¸ðòûøГ*
    char chr;
    char str[1024];//èñõîäГ*Г*Гї ñòðîêГ*
    char buf[32];//Áóäåò ñîäåðæГ*ГІГј Гў Г±ГҐГЎГҐ ïåðåâ¸òðûø Г¬Г*ГЄГ± äëèГ*Г*Г»
    char delim[] = " ,.!?;";//ÂîçìîæГ*ûå Г°Г*çäåëèòåëè ìåæäó ñëîâГ*ìè
    printf("\tEnter input string\n");
    scanf("%[^\n]%c",str,&chr);//Г‚ str ГІГ® Г·ГІГ® ââåëè Гў chr - '\n' îò ââîäГ*
    sprintf(buf,"%s",str);
    char * word = strtok(buf,delim);
    if(!word)
        printf("String not contain words or empty!\n");
    else
    {
        
        while(word)
        {
            if(isBackWord(word) == 1)
            if(mLen < (sLen = strlen(word)))
            {
                sprintf(buf,"%s",word);
                mLen = sLen;
            }
            word = strtok(NULL,delim);
        }
        printf("Max len of BackWord   : %d\n",mLen);
        printf("BackWord with Max len : %s\n",buf);
    }
    system("pause");
    return 0;
}
1
Миниатюры
Найти в строке слово-перевертыш максимальной длины  
01.11.2011, 11:07
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
01.11.2011, 11:07
Привет! Вот еще темы с ответами:

В каждой строке найти слово минимальной длины - C++
у меня дан код программы не могу его дописать на С задача такова даны строки в каждой строке нужно найти минимальное слово длиной и...

Найти порядковый номер слова максимальной длины в строке и номер позиции, с которой оно начинается - C++
помогите пожалуйста с программой( среда Visual C ) Дана строка символов, состоящая из произвольного текста, слова разделены пробелами....

Поменять местами слово максимальной и минимальной длины. - C++
Поменять местами слово максимальной и минимальной длины. строки char*. Как это можно сделать? Слова в строке разделены пробелом или...

Определить все слова максимальной длины в строке - C++
Определить все слова максимальной длины в строке Начало положено,строка инициализирована int main() { setlocale(LC_ALL, &quot;rus&quot;); ...


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

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

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