1. Получи 30.000 рублей. Для получения денег необходимо принять участие в конкурсе авторов codeby. С условиями и призами можно ознакомиться на этой странице ...

    Внимание! Регистрация авторов на конкурс закрыта.

    Скрыть объявление
  2. Требуются разработчики и тестеры для проекта codebyOS. Требования для участия в проекте: Знание принципов работы ОС на базе Linux; Знание Bash; Крайне желательное знание CPP, Python, Lua; Навыки системного администрирования. Подробнее ...

    Скрыть объявление

C ++ Сравнение символов

Тема в разделе "С и С++", создана пользователем BoSSea, 9 дек 2010.

Статус темы:
Закрыта.
  1. BoSSea

    BoSSea Гость

    Репутация:
    0
    Привет, помогите разобраться с программой ...
    Задание : С клавиатуры считывается ряд символов , вывести на экран самое короткое слово . Спс заранее
    <!--shcode--><pre><code class='sql'>#include<stdio.h>
    #include<conio.h>
    void main()
    { char q[80],min[80]; int i,j;
    clrscr();
    gets(q);
    for (i=0;q;i++)
    for (j=0;min[j];j++)
    if (min[j]>q) min[j]=q;
    printf("Samoe korotkoe slovo : %c",min[j]);
    getch();
    }[/CODE]
     
  2. lazybiz

    lazybiz Well-Known Member

    Репутация:
    0
    Регистрация:
    3 ноя 2010
    Сообщения:
    1.339
    Симпатии:
    0
    > С клавиатуры считывается ряд символов
    Предложение, состоящее из слов?
     
  3. BoSSea

    BoSSea Гость

    Репутация:
    0
    Ну скорее всего что ряд слов поскольку вывести на экран нужно самое короткое слово
     
  4. lazybiz

    lazybiz Well-Known Member

    Репутация:
    0
    Регистрация:
    3 ноя 2010
    Сообщения:
    1.339
    Симпатии:
    0
    Что-то я не понял.. Программа должна в этих символах слова искать??
    Или под словами подразумеваются ряды символов, разделенные запятыми?
     
  5. savaa

    savaa Гость

    Репутация:
    0
    нужно или регекспы юзать или создать массив строк (или двумерный массив чаров) и записать туда слова.
    например,
    Код:
    char *startstring="ololo o olo";
    
    char **words;
    char = new words*[11]; //количество символов исходной строки.
    int counter[11]; // считает длину слов
    for (int i=0i;<11;i++)
    words[i]=new char[11]; //собствено длина каждого слова
    
    int k=0,j=0;
    for (int i=0;i<11;i++)
    if (startstring[i]==" ")
    { counter[k]=j-1; k++; j=0; }
    else
    { words[k][j]=startstring[i]; j++ }
    реализация, ясное дело, не фонтан, но хоть что-то на скорую руку=)
    а потом выбираешь с массива меньшее значение и выводишь слово аля

    Код:
    for (int i=0;i<11;i++)
    printf("words[counter[min]][i]");
     
  6. lazybiz

    lazybiz Well-Known Member

    Репутация:
    0
    Регистрация:
    3 ноя 2010
    Сообщения:
    1.339
    Симпатии:
    0
    Тут не "не фонтан", тут "не водопад виктория"...
     
  7. savaa

    savaa Гость

    Репутация:
    0
    ну, можно посчитать длинну исходной строки функцией и тралаляля, но вчера и сегодня тоже бака гудит и думаю туго%)
     
  8. ensane

    ensane Гость

    Репутация:
    0
    Вариант 1. Тут мы сохраняем все слова в отдельный массив. Неэкономно в плане расхода памяти, но мало ли, вдруг пригодится:
    Код:
    #include <stdio.h>
    #include <cstring>
    
    #define MAX_WORDS 1024
    #define	MAX_WORD_LENGTH 64
    
    bool split(const char *src, char *word, char *rest){
    /*	делим строку src на одно слово и остаток строки, попутно выбрасывая
    пробелы в начале и в конце строки
    т.е. из "  раз	два	 три  " получим "раз" и "	два	 три"
    возвращаем false если в src только одно слово*/
    size_t start, end, sp_pos, sp_pos2;
    start = 0; end = strlen(src)-1;
    while((src[start]==' ')&&(start<end))start++;
    while((src[end]==' ')&&(end>start))end--;
    if(start>=end)return false;//случилось что-то очень нехорошее! строка состоит из одних пробелов!
    sp_pos = start;
    //sp_pos2 = end;
    while((src[sp_pos]!=' ')&&(sp_pos<end))sp_pos++;
    if(sp_pos == end){//в строке только одно слово
    strncpy(word, src+start, (end-start+1));
    word[end-start+1]=0;
    return false;
    };
    /*
    если мы дошли сюда, то у нас в start - начало первого слова
    в sp_pos - адрес первого пробела, т.е. конец первого слова+1
    а в end - конец строки
    */
    strncpy(word, src+start, (sp_pos - start));word[sp_pos - start]=0;
    strncpy(rest, src+sp_pos, (end-sp_pos+1));rest[end-sp_pos+1]=0;
    return true;
    };
    
    int _tmain(int argc, _TCHAR* argv[])
    {
    setlocale(LC_ALL,"Russian");
    char *words[MAX_WORDS];
    char *buf = new char[MAX_WORDS * MAX_WORD_LENGTH];
    printf("Введите ваше предложение:");
    gets(buf);
    
    size_t cur_word = 0;
    bool done = false;
    char *str = buf;//поступаем так, чтобы не потерять указатель на начало строки.
    do{
    words[cur_word] = new char[MAX_WORD_LENGTH];
    if(split(str, words[cur_word], str))cur_word++;
    else done = true;
    }while(!done);
    
    delete [] buf;
    size_t max_length = 0;
    size_t max_idx = 0;
    for(size_t i=0; i<=cur_word;i++){
    if(strlen(words[i])>max_length){
    max_length = strlen(words[i]);
    max_idx = i;
    };
    };
    
    printf("Слово с максимальной длиной(%i):\"%s\"\n", max_length, words[max_idx]);
    
    for(size_t i=0; i<=cur_word;i++){
    delete[] words[i];
    };
    return 0;
    }
    Вариант второй: слова отдельно не храним. Только слово с максимальной длиной.
    Код:
    #include <stdio.h>
    #include <cstring>
    
    #define MAX_WORDS 1024
    #define	MAX_WORD_LENGTH 64
    
    bool split(const char *src, char *word, char *rest){
    /*	делим строку src на одно слово и остаток строки, попутно выбрасывая
    пробелы в начале и в конце строки
    т.е. из "  раз	два	 три  " получим "раз" и "	два	 три"
    возвращаем false если в src только одно слово*/
    size_t start, end, sp_pos, sp_pos2;
    start = 0; end = strlen(src)-1;
    while((src[start]==' ')&&(start<end))start++;
    while((src[end]==' ')&&(end>start))end--;
    if(start>=end)return false;//случилось что-то очень нехорошее! строка состоит из одних пробелов!
    sp_pos = start;
    //sp_pos2 = end;
    while((src[sp_pos]!=' ')&&(sp_pos<end))sp_pos++;
    if(sp_pos == end){//в строке только одно слово
    strncpy(word, src+start, (end-start+1));
    word[end-start+1]=0;
    return false;
    };
    /*
    если мы дошли сюда, то у нас в start - начало первого слова
    в sp_pos - адрес первого пробела, т.е. конец первого слова+1
    а в end - конец строки
    */
    strncpy(word, src+start, (sp_pos - start));word[sp_pos - start]=0;
    strncpy(rest, src+sp_pos, (end-sp_pos+1));rest[end-sp_pos+1]=0;
    return true;
    };
    
    int _tmain(int argc, _TCHAR* argv[])
    {
    setlocale(LC_ALL,"Russian");
    char *word = new char[MAX_WORD_LENGTH];
    char *result = new char[MAX_WORD_LENGTH];
    char *buf = new char[MAX_WORDS * MAX_WORD_LENGTH];
    size_t max_length = 0;
    printf("Введите ваше предложение:");
    gets(buf);
    
    size_t cur_word = 0;
    bool done = false;
    char *str = buf;//поступаем так, чтобы не потерять указатель на начало строки.
    do{
    if(split(str, word, str))	cur_word++; else done = true;
    if(strlen(word)>max_length){
    max_length = strlen(word);
    strcpy(result, word);
    };
    }while(!done);
    
    delete [] buf;
    delete [] word;
    
    printf("Слово с максимальной длиной(%i):\"%s\"\n", max_length, result);
    
    delete [] result;	
    return 0;
    }
    Можно, как вариант, вообще не делить на слова, а просто пробегать по строке, выделяя координаты пробелов. См. вариант от savaa, если он его до ума доведет.
     
Загрузка...
Похожие Темы - Сравнение символов
  1. Erlan
    Ответов:
    8
    Просмотров:
    1.792
  2. k85
    Ответов:
    2
    Просмотров:
    1.278
  3. clas
    Ответов:
    3
    Просмотров:
    1.704
  4. juk-777
    Ответов:
    29
    Просмотров:
    5.094
  5. aank10
    Ответов:
    3
    Просмотров:
    2.075
Статус темы:
Закрыта.

Поделиться этой страницей