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

Функции.Вызов.Алгоритм сортировки - C++

Восстановить пароль Регистрация
 
RASHFor
6 / 6 / 0
Регистрация: 12.02.2012
Сообщений: 224
05.07.2012, 15:02     Функции.Вызов.Алгоритм сортировки #1
Идея состоит в том ,чтобы ввести данные типа string через cin,разделённыйе пробелами или запятыми.
И отсортировать в алфавитном порядке.
Очень много ошибок.вот код:
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
#include <iostream>
#include <cstring>
 
using namespace std;
 
vector<string> sort(vector<string>& strlist );  //????
void Out(vector<string>& str);                     //????
int main()
{   string str;
    cin.getline(str);
sort(str);
Out(str);
    return 0;
}
 
 
bool space(char c)
{if (c==","||c==" ";){
    return c;}
    }
 
vector<string> sort(vector<string>& str)
{
    typedef string::const_iterator iter;
    vector<string> ret;
    iter i = str.begin();
    while(i!=str.end()){
        k=str.begin();
        if (str[i]==" " || str[i]=",")j=i;
        if(str[k]<str[j]) {temp=str[k];
                          str[k]=str[j];
                          str[j]=temp;
                          {
ret.push_back(str)
                       }
  }
        void Out(vector<string>& str){
            for (vector<string>::const_iterator iter = str.begin();iter != str.end();++iter)
            {cout<<"str"<<(*iter)<<endl;}
                  }
Добавлено через 6 минут
+ #include<vector> конечно же
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
05.07.2012, 15:02     Функции.Вызов.Алгоритм сортировки
Посмотрите здесь:

C++ Алгоритм сортировки
Алгоритм квадратичной сортировки C++
C++ Комбинированый алгоритм сортировки
C++ Алгоритм сортировки
C++ Алгоритм сортировки
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Jupiter
Каратель
Эксперт C++
6542 / 3962 / 226
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
05.07.2012, 15:04     Функции.Вызов.Алгоритм сортировки #2
ввод через пробел
C++
1
2
3
4
5
6
7
8
9
10
11
#include <iostream>
#include <iterator>
#include <string>
#include <set>
 
int main()
{
    std::set<std::string> set((std::istream_iterator<std::string>(std::cin)), std::istream_iterator<std::string>());
    for (auto& i = set.cbegin(), end = set.cend(); i != end; ++i)
        std::cout << *i << std::endl;
}
RASHFor
6 / 6 / 0
Регистрация: 12.02.2012
Сообщений: 224
05.07.2012, 15:11  [ТС]     Функции.Вызов.Алгоритм сортировки #3
хорошо будет последовательны:
Код не работает.Почему?(((
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
#include <iostream>
#include <cstring>
#include <vector>
#include <iterator>
#include <set>
using namespace std;
 
 
void Out();
 
int main()
{
    string string;
     set<string> set((istream_iterator<string>(cin)), istream_iterator<string>());
    for (auto& i = set.cbegin(), end = set.cend(); i != end; ++i)
        cout << *i << endl;
        
Out(str);
    return 0;
}
    
 
bool space(char c)
{if (c==","||c==" ";){
    return c;}
    }
 
 
        void Out(vector<string>& str){
            for (vector<string>::const_iterator iter = str.begin();iter != str.end();++iter)
            {cout<<"str"<<(*iter)<<endl;}
                  }
Добавлено через 3 минуты
И вы мне чем то непонятным голову забиваете.....
Ввод я и через cin смогу сделать,до умного ввода я ещё не дошёл.
Обьясните мне где ошибки в моём первом коде,пожалуйста.....
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
05.07.2012, 15:46     Функции.Вызов.Алгоритм сортировки #4
Цитата Сообщение от RASHFor Посмотреть сообщение
{if (c==","||c==" "
Символьной переменной строку не присваивают. Тут одинарные кавычки нужны.
gray_fox
What a waste!
 Аватар для gray_fox
1244 / 1127 / 53
Регистрация: 21.04.2012
Сообщений: 2,350
Завершенные тесты: 3
05.07.2012, 15:54     Функции.Вызов.Алгоритм сортировки #5
Цитата Сообщение от RASHFor Посмотреть сообщение
set<string> set
Во-первых тут будет конфликт имён, во-вторых этот сет передаётся в ф-ю Out, у которой тип параметра вектор, в-третьих есть уверенность в том, что все строки будут различны? потому-что сет не сохранит дубликаты. И в Out стоило бы параметр сделать константной ссылкой.
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
05.07.2012, 15:54     Функции.Вызов.Алгоритм сортировки #6
Почему в функцию sort() передаётся string, если у неё параметр vector<string>?
RASHFor
6 / 6 / 0
Регистрация: 12.02.2012
Сообщений: 224
05.07.2012, 16:00  [ТС]     Функции.Вызов.Алгоритм сортировки #7
Спасибо.А строка 6 и 7 ?в чём ошибки?

Добавлено через 6 минут
так.Давайте заново.
Вот быдлокод:
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
#include <iostream>
#include <cstring>
#include <vector> 
using namespace std;
 
vector<string> sort(vector<string>& strlist );  //????
void Out(const vector<string>& str);                     //????
int main()
{  
vector<string> str;
    cin.getline(str);
sort(str);
Out(str);
    return 0;
}
 
 
bool space(char c)
{if (c==','||c==' ';){
    return c;}
    }
 
vector<string> sort(vector<string>& str)
{
    typedef string::const_iterator iter;
    vector<string> ret;
    iter i = str.begin();
    while(i!=str.end()){
        k=str.begin();
        if (str[i]==' ' || str[i]=',')j=i;
        if(str[k]<str[j]) {temp=str[k];
                          str[k]=str[j];
                          str[j]=temp;
                          {
ret.push_back(str)
                       }
  }
        void Out(const vector<string>& str){
            for (vector<string>::const_iterator iter = str.begin();iter != str.end();++iter)
            {cout<<"str"<<(*iter)<<endl;}
                  }
Помогите разобраться
DU
1477 / 1053 / 45
Регистрация: 05.12.2011
Сообщений: 2,279
05.07.2012, 16:01     Функции.Вызов.Алгоритм сортировки #8
а ошибки запостить сюда сложно?
может они из-за того, что вместо #include <string> у вас #include <cstring>
еще в функции sort нет return, хотя функция должна возвращать вектор строк.
gray_fox
What a waste!
 Аватар для gray_fox
1244 / 1127 / 53
Регистрация: 21.04.2012
Сообщений: 2,350
Завершенные тесты: 3
05.07.2012, 16:06     Функции.Вызов.Алгоритм сортировки #9
Цитата Сообщение от RASHFor Посмотреть сообщение
vector<string> str; cin.getline(str);
Так не получится, getline читает строку, а не вектор string.
RASHFor
6 / 6 / 0
Регистрация: 12.02.2012
Сообщений: 224
05.07.2012, 16:09  [ТС]     Функции.Вызов.Алгоритм сортировки #10
Извеняюсь.
return ret; добавил в функцию Sort
Ошибки
- Построение начато: проект: words, Конфигурация: Debug Win32 ------
Компиляция...
words.cpp
c:\documents and settings\мои документы\visual studio 2008\projects\words\words\words.cpp(10) : error C2661: std::basic_istream<_Elem,_Traits>::getline: нет перегруженной функции, принимающей 1 аргументов
with
[
_Elem=char,
_Traits=std::char_traits<char>
]
c:\documents and settings\мои документы\visual studio 2008\projects\words\words\words.cpp(19) : warning C4800: char: принудительно задано логическое значение 'true' или 'false' (предупреждение о производительности)
c:\documents and settings\мои документы\visual studio 2008\projects\words\words\words.cpp(26) : error C2440: инициализация: невозможно преобразовать 'std::_Vector_iterator<_Ty,_Alloc>' в 'std::_String_const_iterator<_Elem,_Traits,_Alloc>'
with
[
_Ty=std::string,
_Alloc=std::allocator<std::string>
]
and
[
_Elem=char,
_Traits=std::char_traits<char>,
_Alloc=std::allocator<char>
]
Ни один конструктор не смог принять исходный тип, либо разрешение перегрузки конструктора неоднозначно
c:\documents and settings\мои документы\visual studio 2008\projects\words\words\words.cpp(27) : error C2679: бинарный '!=': не найден оператор, принимающий правый операнд типа 'std::_Vector_iterator<_Ty,_Alloc>' (или приемлемое преобразование отсутствует)
with
[
_Ty=std::string,
_Alloc=std::allocator<std::string>
]
d:\program files\microsoft visual studio 9.0\vc\include\xstring(233): может быть 'bool std::_String_const_iterator<_Elem,_Traits,_Alloc>::operator !=(const std::_String_const_iterator<_Elem,_Traits,_Alloc> &) const'
with
[
_Elem=char,
_Traits=std::char_traits<char>,
_Alloc=std::allocator<char>
]
при попытке сопоставить список аргументов '(iter, std::_Vector_iterator<_Ty,_Alloc>)'
with
[
_Ty=std::string,
_Alloc=std::allocator<std::string>
]
c:\documents and settingsмои документы\visual studio 2008\projects\words\words\words.cpp(27) : fatal error C1903: не удается восстановить после предыдущих ошибок; остановка компиляции
Журнал построения был сохранен в "file://c:\Documents and Settings\Мои документы\Visual Studio 2008\Projects\words\words\Debug\BuildLog.htm"
words - ошибок 4, предупреждений 1
========== Построение: успешно: 0, с ошибками: 1, без изменений: 0, пропущено: 0 ==========


Добавлено через 3 минуты
gray_fox,
а как надо?
gray_fox
What a waste!
 Аватар для gray_fox
1244 / 1127 / 53
Регистрация: 21.04.2012
Сообщений: 2,350
Завершенные тесты: 3
05.07.2012, 16:15     Функции.Вызов.Алгоритм сортировки #11
Я бы так предложил:
C++
1
2
3
4
5
6
7
8
9
10
11
#include <iostream>
#include <vector>
#include <string>
 
int main() {
   std::vector<std::string> text;
   std::string word;
   while (std::cin >> word) {
      text.push_back(word);
   }
}
Добавлено через 3 минуты
или так попроще:
C++
1
2
3
4
5
6
7
8
#include <iostream>
#include <iterator>
#include <vector>
#include <string>
 
int main() {
   std::vector<std::string> text((std::istream_iterator<std::string>(std::cin)), std::istream_iterator<std::string>());
}
но тут надо в конце EOF добавлять.
DU
1477 / 1053 / 45
Регистрация: 05.12.2011
Сообщений: 2,279
05.07.2012, 16:16     Функции.Вызов.Алгоритм сортировки #12
да у вас путаница какая-то вообще. даже когда это скомпилится, это работать не будет.
вот примерный алгоритм:
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
void Split(const string& line, vector<string>& words)
{
  ...
}
 
void Sort(vector<string>& words)
{
   ...
}
 
void Out(const vector<string>& words)
{
  ...
}
 
int main()
{
  string line;
  cin.getline(line);
 
  vector<string> words;
  Split(line, words); // разбиваем строку на слова. результат разбиения окажется в векторе строк
  Sort(words); // сортировка вектора со словами
  Out(words); // печать 
 
   return 0;
}
Вот еще раз заполните пустые тут функции согласно их сигнатурам и будет вам счастье
RASHFor
6 / 6 / 0
Регистрация: 12.02.2012
Сообщений: 224
05.07.2012, 16:41  [ТС]     Функции.Вызов.Алгоритм сортировки #13
угу.А можно функцию Сплит код.....?
Или обїясниет что она делает...

Я ввожу строковый тип:
0123456789..12
Дима Катя Оля - это строка.
А функция Сплит:
[0] [1 ] [2 ]
Дима Катя Оля
так что ли?

Добавлено через 9 минут
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
vector<string> sort(vector<string>& str)
{
    typedef vector<string>::iterator iter;
    vector<string> ret;
    iter i = str.begin();
    iter k = str.begin();
    while(i!=str.end()){i++;
     //   k=str.begin();
    if (str[i]==' ' || str[i]=',') {j=i;
        if(str[k]<str[j]) {temp=str[k];
                          str[k]=str[j];
                          str[j]=temp;
                          {
ret.push_back(str)
                       }
        }
c:\documents and settings\мои документы\visual studio 2008\projects\words\words\words.cpp(35) : error C2679: бинарный '[': не найден оператор, принимающий правый операнд типа 'iter' (или приемлемое преобразование отсутствует)


В чём ошибка?
gray_fox
What a waste!
 Аватар для gray_fox
1244 / 1127 / 53
Регистрация: 21.04.2012
Сообщений: 2,350
Завершенные тесты: 3
05.07.2012, 16:44     Функции.Вызов.Алгоритм сортировки #14
Цитата Сообщение от RASHFor Посмотреть сообщение
str[i]
итератор это не индекс, это как указатель: что бы получить значение, нужно разыменовать:
C++
1
*i
RASHFor
6 / 6 / 0
Регистрация: 12.02.2012
Сообщений: 224
05.07.2012, 16:52  [ТС]     Функции.Вызов.Алгоритм сортировки #15
Разіменовал.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
vector<string> sort(vector<string>& str)
{
    typedef vector<string>::iterator iter;
    vector<string> ret;
    iter i = str.begin();
    iter k = str.begin();
    while(i!=str.end()){i++;
     //   k=str.begin();
    if ((*i)==' '|| (*i)=',') {j=i;
        if(str[k]<str[j]) {temp=str[k];
                          str[k]=str[j];
                          str[j]=temp;
                          {
ret.push_back(str)
                       }
        }
строка 9:
Ошибка:c:\documents and settings\мои документы\visual studio 2008\projects\words\words\words.cpp(35) : error C2784: bool std::operator ==(const std::vector<_Ty,_Alloc> &,const std::vector<_Ty,_Alloc> &): не удалось вывести аргумент шаблон для "const std::vector<_Ty,_Alloc> &" из "std::basic_string<_Elem,_Traits,_Ax>"
with
[
_Elem=char,
_Traits=std::char_traits<char>,
_Ax=std::allocator<char>
]
gray_fox
What a waste!
 Аватар для gray_fox
1244 / 1127 / 53
Регистрация: 21.04.2012
Сообщений: 2,350
Завершенные тесты: 3
05.07.2012, 16:59     Функции.Вызов.Алгоритм сортировки #16
Цитата Сообщение от RASHFor Посмотреть сообщение
(*i)==' '
i указывает на строку, получатся сравниваешь строку и символьный литерал.

Добавлено через 1 минуту
Вообще тут уже предлагали: сначала разбить строку на слова, потом уже сортировать.

Добавлено через 3 минуты
тем более сортировку можно самому не писать, в <algorithm> есть std::sort:
C++
1
std::sort(words.begin(), words.end());
RASHFor
6 / 6 / 0
Регистрация: 12.02.2012
Сообщений: 224
05.07.2012, 17:09  [ТС]     Функции.Вызов.Алгоритм сортировки #17
[очу сам,чтобы понять....
а никто не может помочь....

Добавлено через 6 минут
И что значит разбить на слова???Зачем?
Я ж и спрашиваю.
В векторе будет храниться под [0]индексом-Дима ,[1]-Катя, [2]-Оля ???
gray_fox
What a waste!
 Аватар для gray_fox
1244 / 1127 / 53
Регистрация: 21.04.2012
Сообщений: 2,350
Завершенные тесты: 3
05.07.2012, 17:33     Функции.Вызов.Алгоритм сортировки #18
Цитата Сообщение от RASHFor Посмотреть сообщение
В векторе будет храниться под [0]индексом-Дима ,[1]-Катя, [2]-Оля ???
Да
Цитата Сообщение от RASHFor Посмотреть сообщение
?Зачем?
Очевидно, что бы потом отсортировать.
RASHFor
6 / 6 / 0
Регистрация: 12.02.2012
Сообщений: 224
05.07.2012, 17:41  [ТС]     Функции.Вызов.Алгоритм сортировки #19
Спасибо ,Кеп.
Каким образом сравнивать слово Дима и слово Оля.
как понять,какая буква старше?если Дима єто єлемент с индексом -0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
05.07.2012, 18:31     Функции.Вызов.Алгоритм сортировки
Еще ссылки по теме:

C++ Алгоритм сортировки в файле
Реализовать алгоритм сортировки C++
Алгоритм сортировки C++

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

Или воспользуйтесь поиском по форуму:
gray_fox
What a waste!
 Аватар для gray_fox
1244 / 1127 / 53
Регистрация: 21.04.2012
Сообщений: 2,350
Завершенные тесты: 3
05.07.2012, 18:31     Функции.Вызов.Алгоритм сортировки #20
Цитата Сообщение от RASHFor Посмотреть сообщение
Спасибо ,Кеп.
Какой вопрос - такой ответ.
Цитата Сообщение от RASHFor Посмотреть сообщение
Каким образом сравнивать слово Дима и слово Оля.
Очень просто, с помощью < .

Добавлено через 44 минуты
Как вариант:
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
45
#include <iostream>
#include <sstream>
#include <iterator>
#include <algorithm>
#include <vector>
#include <string>
#include <cctype>
 
 
void in(std::string & text);
void split(std::string text, std::vector<std::string> & words);
void sort(std::vector<std::string> & words);
void out(std::vector<std::string> const& words);
 
 
int main() {
   std::string text;
   std::vector<std::string> words;
   
   in(text);
   split(text, words);
   sort(words);
   out(words);
}
 
 
void in(std::string & text) {
   text.assign(
     (std::istreambuf_iterator<std::string::value_type>(std::cin)),
      std::istreambuf_iterator<std::string::value_type>());
}
 
void split(std::string text, std::vector<std::string> & words) {
   std::replace_if(text.begin(), text.end(), ::ispunct, ' ');
   std::istringstream iss(text);
   words.assign(std::istream_iterator<std::string>(iss), std::istream_iterator<std::string>());
}
 
void sort(std::vector<std::string> & words) {
   std::sort(words.begin(), words.end());
}
 
void out(std::vector<std::string> const& words) {
   std::copy(words.begin(), words.end(), std::ostream_iterator<std::string>(std::cout, "\n"));
}
http://ideone.com/Aoi2M
Yandex
Объявления
05.07.2012, 18:31     Функции.Вызов.Алгоритм сортировки
Ответ Создать тему
Опции темы

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