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

Работа со строкой без библиотечных функций - C++

Восстановить пароль Регистрация
 
fruktik
 Аватар для fruktik
32 / 32 / 3
Регистрация: 03.03.2011
Сообщений: 302
24.01.2012, 21:15     Работа со строкой без библиотечных функций #1
Дана строка типа "abc xyz dea"
На выходе расположить слова в алфавитном порядке первых букв, т.е. "abc dea xyz"
Не могу раскрутить алгоритм...
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Chelioss
179 / 179 / 4
Регистрация: 08.01.2011
Сообщений: 1,131
24.01.2012, 21:18     Работа со строкой без библиотечных функций #2
Это называется сортировка по возрастанию с учетом пробелов.
Сортировку знаем? Знаем. Вперед.
fruktik
 Аватар для fruktik
32 / 32 / 3
Регистрация: 03.03.2011
Сообщений: 302
24.01.2012, 21:31  [ТС]     Работа со строкой без библиотечных функций #3
нет. сделал много задач на строки(удаление пробелов, замена часто встречающихся символов и много всякой такой штуки) а это не знаю(
go
Эксперт C++
3582 / 1362 / 128
Регистрация: 16.04.2009
Сообщений: 4,528
24.01.2012, 23:16     Работа со строкой без библиотечных функций #4
Разбиваете строки на слова. Помещаете их в вектор. Сортируете вектор. Формируете из него обратно строку. Есть нюансы у этого алгоритма. Но я думаю что в дебри вам лезть не нужно.
fruktik
 Аватар для fruktik
32 / 32 / 3
Регистрация: 03.03.2011
Сообщений: 302
24.01.2012, 23:22  [ТС]     Работа со строкой без библиотечных функций #5
сорри, но векторы никогда не использовал...это динамический массив?
что посоветуете почитать по этой теме?
go
Эксперт C++
3582 / 1362 / 128
Регистрация: 16.04.2009
Сообщений: 4,528
24.01.2012, 23:45     Работа со строкой без библиотечных функций #6
Вы на правильном пути. Думаю читать не имеет смысла, если они вам не нужны. Вектор это динамический массив. Он здесь очень удобен, так как мы заранее не знаем количество слов. Но ведь можно выделить и памяти с запасом. Вариантов много. Ну а почитать лучше документацию по ним. Но сразу с STL не разберешься, если пробел большой
Paporotnik
383 / 227 / 7
Регистрация: 06.07.2011
Сообщений: 512
24.01.2012, 23:50     Работа со строкой без библиотечных функций #7
тока не ясно получается - библиотечные алгоритмы над строками использовать нельзя, а вектора значит можно?
go
Эксперт C++
3582 / 1362 / 128
Регистрация: 16.04.2009
Сообщений: 4,528
24.01.2012, 23:57     Работа со строкой без библиотечных функций #8
Paporotnik, ну так ведь все можно и самому реализовать. Так стоп. О чем идет речь: std::string или char* ?
fruktik
 Аватар для fruktik
32 / 32 / 3
Регистрация: 03.03.2011
Сообщений: 302
25.01.2012, 00:09  [ТС]     Работа со строкой без библиотечных функций #9
go, char st[20]={.....}. Не стринг
Chelioss
179 / 179 / 4
Регистрация: 08.01.2011
Сообщений: 1,131
25.01.2012, 01:06     Работа со строкой без библиотечных функций #10
Сортировать численные массивы умеете?
fruktik
 Аватар для fruktik
32 / 32 / 3
Регистрация: 03.03.2011
Сообщений: 302
25.01.2012, 01:11  [ТС]     Работа со строкой без библиотечных функций #11
Chelioss, конечно, пузырьком, вставкой, вспомогательными массивами - все эт умеем)
-=ЮрА=-
Заблокирован
Автор FAQ
25.01.2012, 11:43     Работа со строкой без библиотечных функций #12
Цитата Сообщение от fruktik Посмотреть сообщение
Дана строка типа "abc xyz dea"
На выходе расположить слова в алфавитном порядке первых букв, т.е. "abc dea xyz"
Не могу раскрутить алгоритм...
- вот вникай в этот
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
#include <iostream>
#include <sstream>
#include <string>
using namespace std;
 
int main()
{
    int i,j, nWords = 0;//Число слов в тексте
    string text;
    string word; 
    stringstream ss;
    cout<<"Enter string\n";
    getline(cin,text);
    ss.str(text);
    //Сначала посчитаем число слов
    while(ss>>word)
        nWords++;
    //Теперь наш стринг-поток надо "перезагрузить"
    ss.clear();
    ss.seekg(0,ios::beg);
    ss.str(text);//Заново впихиваем введенный текст в поток
    //Выделим память под массив слов
    string * array = new string[nWords];
    for(i = 0; i < nWords; i++)
        ss>>array[i];
    //Ну а теперь сортируем прямЫм выбором
    for(    i = 0; i < nWords; i++)
    for(j = i + 1; j < nWords; j++)
    {
        if((array[j])[0] < (array[i])[0])
        {
            word = array[i];
            array[i] = array[j];
            array[j] = word;
        }
    }
    cout<<"Sorted words\n";
    for(i = 0; i < nWords; i++)
        cout<<array[i]<<" ";
    cout<<endl;
    system("pause");
    delete [] array;//ну и чистим память при выходе
    return 0;
}
Миниатюры
Работа со строкой без библиотечных функций  
-=ЮрА=-
Заблокирован
Автор FAQ
25.01.2012, 11:45     Работа со строкой без библиотечных функций #13
PS:Такой ввод в VisualStudio 6.0 требует нажатия Enter 2 раза
Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
getline(cin,text);
, на 9-й версии всё работает после 1-го нажатия...
fruktik
 Аватар для fruktik
32 / 32 / 3
Регистрация: 03.03.2011
Сообщений: 302
25.01.2012, 14:42  [ТС]     Работа со строкой без библиотечных функций #14
-=ЮрА=-, спасибо за труды, но пользоваться библиотекой стринг нельзя(
только массив типа ЧАР и никаких библиотечных функций
-=ЮрА=-
Заблокирован
Автор FAQ
25.01.2012, 14:47     Работа со строкой без библиотечных функций #15
Цитата Сообщение от fruktik Посмотреть сообщение
-=ЮрА=-, спасибо за труды, но пользоваться библиотекой стринг нельзя(
только массив типа ЧАР и никаких библиотечных функций
- т.е всё делать в циклах - без проблем....
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
25.01.2012, 14:55     Работа со строкой без библиотечных функций
Еще ссылки по теме:

БЕЗ использования библиотечных функций C++
C++ Действия над строками char с использованием библиотечных функций и без них
Строки и использование библиотечных функций для их обработки C++

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
Chelioss
179 / 179 / 4
Регистрация: 08.01.2011
Сообщений: 1,131
25.01.2012, 14:55     Работа со строкой без библиотечных функций #16
Цитата Сообщение от fruktik Посмотреть сообщение
Chelioss, конечно, пузырьком, вставкой, вспомогательными массивами - все эт умеем)
Тогда представьте, что символьный массив - это численные массив и сортируйте его как численный.
C++
1
2
3
for( int i = отсюда; i < дотсюда; --/++ i )
           for( int j = отсюда; j < дотсюда; --/++j )
                  if( str[] != ' ' ) // тут как-то вставить if, чтобы пробел сортировка не трогагала
Вот вам только надо правильно во вложенный цикл вставить if( str[] != ' '), чтобы пробел не сортировал.
Yandex
Объявления
25.01.2012, 14:55     Работа со строкой без библиотечных функций
Ответ Создать тему
Опции темы

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