Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 25.02.2011, 13:48   #1
Aleksandr22
Новичок
Джуниор
 
Регистрация: 25.02.2011
Сообщений: 9
Восклицание

Помогите написать прогу пож-та!!!???!!!

Строка содержит простое предложение, в котором слова отделяются символом «пробел». Сформировать новую строку, в которой поменять местами слова исходной строки, имеющие максимальную и минимальную длину.

Код:
#include <iostream.h>
#include <stdlib.h>
#include <string.h>

typedef char stringa[101];
stringa b,s,s1;
stringa  a[20];
int c,y,i,j,k,n,dlin,x;

 int main()
{
cout<<"BBEDITE TEKCT HE BOLEE 20 CLOV"<<endl;
cin.getline(s,101);
j=0;k=0;n=0;
strcpy(s1," ");
for (i=0;i<strlen(s);i++)
{
 if (s[i]!=' ')
 {s1[k]=s[i];k++;}
else
 if (strcmp(s1," ")!=0)
    {
     s1[k]='\0';
     strcpy(a[j],s1);
     strcpy(s1," ");
     j++;
     k=0;
    }
}
if (strcmp(s1," ")!=0)
    {
     s1[k]='\0';
     strcpy(a[j],s1);
     strcpy(s1," ");
     j++;
     k=0;
    }

cout<<"B TEKCTE "<<j<<" CLOV"<<endl;
for (i=0;i<j;i++)
cout<<i+1<<" CLOVO = "<<a[i]<<"  "<<endl;

for (i=0;i<j-1;i++)
for (c=i+1; c<j; c++)
if (strlen(a[i])>strlen(a[c]))
{b=a[i];a[i]=a[c];a[c]=b;}

for (i=0;i<j;i++)
cout<<""<<endl;
cout<<"CLOBO C MAKCIMALHOI DLIHHOI = "<<a[j-1]<<endl;
cout<<"CLOBO C MIHIMALHOI DLIHHOI  = "<<a[0]<<endl;

system("PAUSE");
return 0;
}
не могу добиться вывода новой строки, в которой должны меняться местами слова исходной строки

Последний раз редактировалось Stilet; 25.02.2011 в 16:09.
Aleksandr22 вне форума Ответить с цитированием
Старый 25.02.2011, 14:52   #2
Obey-Kun
Линуксоид
Участник клуба
 
Аватар для Obey-Kun
 
Регистрация: 31.07.2009
Сообщений: 1,403
По умолчанию

Вы C++ изучаете или Си? Приведённый вами код фич C++ не использует.
Вот что у меня получилось:
Код:
#include <algorithm>
#include <iostream>
#include <sstream>
#include <string>
#include <vector>
#include <iterator>

using namespace std;

// сравнивалка строк по длине
struct stringLengthPredicate {
    bool operator()(const string &a, const string &b) {
        return a.size() < b.size();
    }
};

int main()
{
    // читаем ввод пользователя
    string input;
    cout << "Enter damn words:\n";
    getline(cin, input);
    
    // разбиваем его на массив слов
    vector<string> v;
    istringstream iss(input);
    copy(istream_iterator<string>(iss),
         istream_iterator<string>(),
         back_inserter<vector<string> >(v));
         
    // меняем местами самое длинное и самое короткое слово
    swap(*max_element(v.begin(), v.end(), stringLengthPredicate()),
         *min_element(v.begin(), v.end(), stringLengthPredicate()));
         
    // выводим получившийся массив, отбивая его элементы пробелами
    copy(v.begin(), v.end(), ostream_iterator<string>(cout, " "));
    cout << endl;
}
Я схожу с ума или это глючит реальность?
Jabber ID: obey@obey.su

Последний раз редактировалось Obey-Kun; 25.02.2011 в 17:12.
Obey-Kun вне форума Ответить с цитированием
Старый 25.02.2011, 17:44   #3
Aleksandr22
Новичок
Джуниор
 
Регистрация: 25.02.2011
Сообщений: 9
По умолчанию

в универе дали прогу Bloodshed Dev-C++ (version 4) и именно в ней надо сделать это задание...в консоли С++
Aleksandr22 вне форума Ответить с цитированием
Старый 25.02.2011, 17:47   #4
Obey-Kun
Линуксоид
Участник клуба
 
Аватар для Obey-Kun
 
Регистрация: 31.07.2009
Сообщений: 1,403
По умолчанию

And what? Там это будет компилироваться отлично.

Просто твой изначальный код фич C++ практически не использовал, только Си, и то коряво.
Я схожу с ума или это глючит реальность?
Jabber ID: obey@obey.su
Obey-Kun вне форума Ответить с цитированием
Старый 25.02.2011, 17:54   #5
Aleksandr22
Новичок
Джуниор
 
Регистрация: 25.02.2011
Сообщений: 9
По умолчанию

untitled3.cpp sstream: No such file or directory

мой пример был подобным для написания этой проги...я не очень то силен в программировании

можно ли задействовать другую библиотеку вместо #include <sstream>???

Последний раз редактировалось Stilet; 25.02.2011 в 18:08.
Aleksandr22 вне форума Ответить с цитированием
Старый 25.02.2011, 18:01   #6
Obey-Kun
Линуксоид
Участник клуба
 
Аватар для Obey-Kun
 
Регистрация: 31.07.2009
Сообщений: 1,403
По умолчанию

Дело в том, что в старых (очень старых) версиях Dev-C++ во встроенном компиляторе не было sstring (In previous versions of Dev-C++, the included compiler did not implement sstream. Fortunately, new versions of Dev-C++ do not have this problem — информация с оффсайта). Просто скачайте актуальную версию. http://bloodshed-dev-c.en.softonic.com/

Цитата:
можно ли задействовать другую библиотеку вместо #include <sstream>
Можно, но код станет хуже. Да и зачем? Это стандартная библиотека, входящая в стандарт C++. Вы же C++ изучаете? Так и пишите на C++!
Я схожу с ума или это глючит реальность?
Jabber ID: obey@obey.su
Obey-Kun вне форума Ответить с цитированием
Старый 25.02.2011, 18:02   #7
Aleksandr22
Новичок
Джуниор
 
Регистрация: 25.02.2011
Сообщений: 9
По умолчанию

если убрать эту библиотеку то эта часть кода выдает ошибки:
istringstream iss(input);
copy(istream_iterator<string>(iss),

у нас просто дед настырный преподает, наверняка не примет работу с такой библиотекой...скажет купил или не сам делал прогу и т.д.

а перетащить библиотеку в мою старую прогу возможно?

Последний раз редактировалось Stilet; 25.02.2011 в 18:08.
Aleksandr22 вне форума Ответить с цитированием
Старый 25.02.2011, 18:05   #8
Obey-Kun
Линуксоид
Участник клуба
 
Аватар для Obey-Kun
 
Регистрация: 31.07.2009
Сообщений: 1,403
По умолчанию

Я прекрасно понимаю, где при удалении этой строки будут проблемы. И ты должен это прекрасно понимать без всяких экспериментов. Ты язык изучаешь как — методом тыка или структурированно? Надо вторым в любом случае, иначе вырастет очередной быдлокодер, который не понимает, что пишет.

Ты мне скажи, вас как с файлами учили работать? Со строками? С массивами неизвестной длины? Слова ifstream, string, vector тебе знакомы?
Я схожу с ума или это глючит реальность?
Jabber ID: obey@obey.su
Obey-Kun вне форума Ответить с цитированием
Старый 25.02.2011, 18:13   #9
Aleksandr22
Новичок
Джуниор
 
Регистрация: 25.02.2011
Сообщений: 9
По умолчанию

со строками и массивами

1 char *strcpy(char *s1, const char *s2);
Копирует строку s2 в массив символов s1 и возвращает значение s1 (размер s1 должен быть больше s2). Фактически s1 присваивается s2.
2 char *strcat(char *s1, const char *s2);
Добавляет строку s2 к строке s1. Первый символ строки s2 записывается поверх завершающего нулевого символа в s1. Поэтому возможно слияние строковых переменных. Возвращает s1.
3 int strcmp(const char *s1, const char *s2);
Сравнивает строки s1 и s2. Функция возвращает значение 0, если строки равны, меньше 0 (обычно -1), если s1 меньше s2, больше 0 (обычно +1), если s1 больше, чем s2.
4 char *strrev(char *s);
Полностью изменяет («переворачивает») строку. Изменяются все символы, кроме символа завершения. Например, строка string\0 изменится на строку gnirts\0.
5 int strlen(const char *s);
Определяет длину строки s. Возвращает количество символов, предшествующих завершающему нулевому элементу.
6 char *strtok(char *s1, const char *s2);
Ищет лексемы в строке s1, которые отделены разделителями, определенными во второй строке s2. Возвращаемое значение: указатель на лексему в s1. Указатель NULL возвращен, когда не имеется больше лексем.
7 char *strlwr(char *s);
Конвертирует (преобразовывает) прописные буквы в строке на нижний регистр.

Очень часто используется функция strlen(s), которая позволяет определять «длину» строковой переменной s.
Для сортировки слов текста или сравнения отдельных слов необходимо использовать функцию strcmp(), например, сравнение двух строковых переменных s1 и s2 осуществляется следующим образом:
if (strcmp(s1,s2)==0)
Присваивание одной строковой переменной значения другой строковой переменной выполняется с помощью функции strcpy(), например, необходимо строковой переменной s1 присвоить значение строковой переменной s2:
strcpy(s1,s2);
Перечень строковых функций, приведенный в таблице 2 это только незначительная, но часто используемая часть функций из заголовочного файла string.h.

что-то такое только дают и всё
Aleksandr22 вне форума Ответить с цитированием
Старый 25.02.2011, 18:14   #10
Obey-Kun
Линуксоид
Участник клуба
 
Аватар для Obey-Kun
 
Регистрация: 31.07.2009
Сообщений: 1,403
По умолчанию

Понятно, то есть вас учат работе со строками в стиле C. Но ты не сказал про массивы неизвестной длины. malloc был? а new?

p.s.: я ушёл спать, может кто-то из форумчан тебе поможет. Мне читать твой было было де факто лень, написал C++-решение исходя из того соображения, что вам давали всё это. Раз не давали, то надо делать, базируясь на том, что тебе уже дали.
Я схожу с ума или это глючит реальность?
Jabber ID: obey@obey.su
Obey-Kun вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
работа со строками Antil Помощь студентам 0 12.12.2010 20:08
Работа с матрицами (норма матрицы, работа со строками) Neitrosha Помощь студентам 1 26.11.2010 20:19
Работа со строками FunnyDev1l Помощь студентам 4 19.05.2010 08:30
Работа со строками(C++) DragoonSki Помощь студентам 1 18.05.2010 18:08
работа со строками lg12 Помощь студентам 7 28.08.2009 17:47