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

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

Восстановить пароль Регистрация
 
cmpunk
5 / 1 / 1
Регистрация: 19.01.2011
Сообщений: 34
01.11.2011, 00:15     Найти в строке слово-перевертыш максимальной длины #1
Дана строка в виде предложения. Найти в ней слово-перевертыш максимальной длинны. Словом будем считать набор символов, отделенных с двух сторон пробелами.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
01.11.2011, 00:15     Найти в строке слово-перевертыш максимальной длины
Посмотрите здесь:

C++ Слово максимальной длины заменить на слово минимальной длины
В строке, состоящей из слов и знаков препинания(пробел.:,!?-;),найти слово максимальной длины, не содержащее заданную букву C++
C++ Поменять местами слово максимальной и минимальной длины.
C++ В строке, состоящей из слов и знаков препинания (пробел . : , ! ?-;), найти слово максимальной длины
C++ Найти в функции в строке слово максимальной длины
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
silent_1991
Эксперт C++
4938 / 3014 / 149
Регистрация: 11.11.2009
Сообщений: 7,024
Завершенные тесты: 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;
}
cmpunk
5 / 1 / 1
Регистрация: 19.01.2011
Сообщений: 34
01.11.2011, 08:17  [ТС]     Найти в строке слово-перевертыш максимальной длины #3
silent_1991 спасибо, но можно бы по проще сделать, что б без файлов и указателей
Olga_
 Аватар для Olga_
840 / 182 / 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;
}
-=ЮрА=-
Заблокирован
Автор 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;
}
Миниатюры
Найти в строке слово-перевертыш максимальной длины  
Yandex
Объявления
01.11.2011, 11:07     Найти в строке слово-перевертыш максимальной длины
Ответ Создать тему
Опции темы

Текущее время: 13:32. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru