Форум С++

 

Ответить на сообщение

Вернуться к теме

Вы отвечаете на сообщение:

Автор: oleg_alexeev   (27.03.2007 в 22:30)
Вот, весьма эффективное решение:


#include <stdio.h>
#include <limits.h>


inline bool IsDelimiter(char c)
{
    return c==' ' || c==',';
}


void FindMinMax(const char *str, char *maxword, char *minword)
{
    const char *maxp=0, *minp=0;  // pointers to max and min words inside input str
    int maxlen=0, minlen=INT_MAX; // length of max and min words

    while (*str)
    {
        // skip delimiters
        while (IsDelimiter(*str)) str++;

        // get current word
        const char *p=str;  // ptr to current word
        int n=0;            // number of letters in current word
        while (*str && !IsDelimiter(*str)) {str++; n++;}

        // compare with max and min
        if (n>maxlen) {maxlen=n; maxp=p;}
        if (n<minlen) {minlen=n; minp=p;}
    }

    // copy max and min words to output buffers
    for (; maxlen; maxlen--) *maxword++ = *maxp++;
    *maxword = 0;
    if (minlen != INT_MAX) for (; minlen; minlen--) *minword++ = *minp++;
    *minword = 0;
}


int main(int argc, char **argv)
{
    char *string = "programmirovanie, eto estj nechto klassnoe";
    char maxword[100], minword[100];

    FindMinMax(string, maxword, minword);
    printf("max: %s\n", maxword);
    printf("min: %s\n", minword);
}


Ваше имя:

Пароль:

Цитировать

Используйте тэги для выделения текста:
Код: [code][/code]
Жирный: [b][/b]
Наклонный: [i][/i]
URL: [url][/url]

Сообщение:

Прикрепить: