Модераторы: bsa
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Сортировка слов в строке 
V
    Опции темы
goody
Дата 21.9.2008, 16:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 31
Регистрация: 23.4.2008

Репутация: нет
Всего: нет



Помогите!! Вообщем задание- создать функцию, которая находит самое длинно слово  и возращает указатель на него, потом с ее помощью вывести слова в порядке убывания!

Функция вроде получилась ,но не понимаю как второй раз ее вызвать чтоб она первое слово игнорировала





Код

#include <stdio.h>
#include <string.h>


using namespace std;


int fyn(char *s);

int main()
{
    char str[250]=" aaaaaa bb cccccccccccc";
    int i,j;
    j=0;
    for(i=fyn(str); i<strlen(str); i++)
    {
        if(str[i]!=' ')
        {
            
            printf("%c", str[i]);
            j++;
        }
        else 
          break; // что тут должно быть? 
    }
    return 0;
}



int fyn(char *s)
{
    int x,y,z,k,l;
    y=z=0;
        
    for(x=0; x<strlen(s); x++)
    {
        
         if(x==strlen(s)-1  && y>0 )
            {
                if( y>z)
                    l=k-y+1;
                    z=y;
                y=0;
            }
        else if(s[x]!=' ')
        {
            y++;
            k=x;
        }
        else if(s[x]==' '  && y>0 )
        {
            if( y>z)
                l=k-y+1;
                z=y;
            y=0;
        }
        
        
    }
printf("\n");
return l;
}



Это сообщение отредактировал(а) goody - 21.9.2008, 16:55
PM MAIL   Вверх
0xffff
Дата 21.9.2008, 17:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 4
Регистрация: 21.9.2008

Репутация: нет
Всего: нет



Я бы предложил вот такой вариант. Только чтобы ввести строку,нужно два раза нажать Enter.(а можно сначала считать в буфер через cin.getline(), а потом преобразовать в string). Если что не понятно, спрашивай
Код

#include <iostream>
#include <string>
using namespace std;
struct str_info
{
    int begin;
    int end;
    int len;
};
int main(int argc,char **argv)
{
    
    string str;
    int k,n;
    getline(cin,str);
    int len = str.length();
    str_info *str_inf = new str_info[len];

    int pos,lastpos;
    int i;
    lastpos = 0;
    pos  = str.find(" ");
    k =0;
    while (pos != -1)
    {
        str_inf[k].begin = lastpos;
        str_inf[k].end = pos-1;
        str_inf[k].len = pos - lastpos;
        k++;
        lastpos = pos;
        lastpos++;
        pos  = str.find(" ",lastpos);
        
    }
    str_inf[k].begin = lastpos;
    str_inf[k].end = len-1;
    str_inf[k].len = str.substr(lastpos,size_t(-1)).length();
    k++;
    cout << "***BEFORE SORT***\n";
    for (i = 0; i < k; i++)
        cout << str.substr(str_inf[i].begin,str_inf[i].len) << endl;
    int j;
    str_info temp;
    for (i = 1; i < k;i++)
        for (j = 0; j <k-1;j++)
        {
            if (str_inf[j].len < str_inf[j+1].len)
            {
                temp = str_inf[j];
                str_inf[j] = str_inf[j+1];
                str_inf[j+1] = temp;
            }
        }
    cout << "\n***AFTER SORT***\n";
    for (i = 0; i < k; i++)
    {
        cout << str.substr(str_inf[i].begin,str_inf[i].len) << endl;
    }

    return 0;
}



    


Это сообщение отредактировал(а) 0xffff - 21.9.2008, 17:27
PM MAIL   Вверх
goody
Дата 21.9.2008, 17:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 31
Регистрация: 23.4.2008

Репутация: нет
Всего: нет



Вот переделал, гляньте плз 

Код

#include <stdio.h>
#include <string.h>


using namespace std;


int fyn(char *s);

int main()
{
    char str[250]="str   rttttr               r ";
    char str2[250]="0";
    strcpy(str2, str);
    int i;
    for(i=fyn(str2); i<strlen(str2); i++)
    {
        if(str2[i]!=' ')
        {
            
            printf("%c", str2[i]);
            str2[i]=' ';
        }
        else 
            i=fyn(str2+1);  // Тут нужно fyn(str2) -но консоль виснет почемуто , а так(fyn(str2+1)) все работает но пропускается 1-ый символ т.к. сдвигаю ук.
    }
    printf("\n");
    puts(str2);
    return 0;
}



int fyn(char *s)
{
    int x,y,z,k,l;
    y=z=0;
        
    for(x=0; x<strlen(s); x++)
    {
        if(s[x]==' '  && y>0 )
        {
            if( y>z)
                l=k-y+1;
                z=y;
            y=0;
        }
        
        
         else if(x==strlen(s)-1  && y>0 )
            {
                if( y>z)
                    l=k-y+1;
                    z=y;
                y=0;
            }
        else if(s[x]!=' ')
        {
            y++;
            k=x;
        }
        
        
    }
printf("\n");
return l;
}


PM MAIL   Вверх
goody
Дата 21.9.2008, 20:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 31
Регистрация: 23.4.2008

Репутация: нет
Всего: нет



Короче нашел тут кучу недочетов, буду исправлять!
PM MAIL   Вверх
J0ker
Дата 22.9.2008, 03:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 986
Регистрация: 17.9.2008

Репутация: 9
Всего: 14



даю алгоритм:
- функция ищет самое длинное слово, выводит его, а затем переносит (memmove) остаток строки после этого слова поверх него включая завершающий ноль и возвращает true
- если никаких слов не найдено - вернуть false
- вызывать функцию в цикле пока не вернет false

Это сообщение отредактировал(а) J0ker - 22.9.2008, 03:01


--------------------
user posted image
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Для новичков"
JackYF
bsa

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, bsa.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.0439 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.