С Новым годом! Форум программистов, компьютерный форум, киберфорум
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
 
RASHFor
6 / 6 / 0
Регистрация: 12.02.2012
Сообщений: 224
#1

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

05.07.2012, 15:02. Просмотров 1031. Ответов 19
Метки нет (Все метки)

Идея состоит в том ,чтобы ввести данные типа 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> конечно же
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
05.07.2012, 15:02
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Функции.Вызов.Алгоритм сортировки (C++):

Алгоритм сортировки - C++
пацаны ребята помогите, реализовал два алгоритма на C++, алгоритм сортировки пирамидальный(кучей) и быстрой сортировки, все они сортируют...

Алгоритм сортировки - C++
Дан одномерный масив. мне в нем нужно отсортировать по возростанию только те числа масива которые простые, а остальные оставить на той...

Алгоритм сортировки - C++
учитель попросил написать сортировку массива по возрастанию в общем виде #include &lt;stdio.h&gt; #include &lt;string.h&gt; int main() { ...

Алгоритм сортировки - C++
Здравствуйте, подскажите пожалуйста какой алгоритм можно использовать при решении такой задачи: Дана строка char * из букв и цифр...

Алгоритм пузырьковой сортировки - C++
#include&lt;iostream.h&gt; #define SIZE 5 void bsort (int iArray, int n); int main() { char ch; int ii; int iArray ; for(ii =...

Алгоритм сортировки в файле - C++
Никак не могу придумать как отсортировать массив значений. Есть файл, в котором находятся данные типа (вершины прямоугольник) : 20 20 69...

19
Jupiter
Каратель
Эксперт С++
6561 / 3982 / 227
Регистрация: 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;
}
0
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 смогу сделать,до умного ввода я ещё не дошёл.
Обьясните мне где ошибки в моём первом коде,пожалуйста.....
0
alsav22
5428 / 4823 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
05.07.2012, 15:46 #4
Цитата Сообщение от RASHFor Посмотреть сообщение
{if (c==","||c==" "
Символьной переменной строку не присваивают. Тут одинарные кавычки нужны.
0
gray_fox
What a waste!
1522 / 1227 / 70
Регистрация: 21.04.2012
Сообщений: 2,565
Завершенные тесты: 3
05.07.2012, 15:54 #5
Цитата Сообщение от RASHFor Посмотреть сообщение
set<string> set
Во-первых тут будет конфликт имён, во-вторых этот сет передаётся в ф-ю Out, у которой тип параметра вектор, в-третьих есть уверенность в том, что все строки будут различны? потому-что сет не сохранит дубликаты. И в Out стоило бы параметр сделать константной ссылкой.
0
alsav22
5428 / 4823 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
05.07.2012, 15:54 #6
Почему в функцию sort() передаётся string, если у неё параметр vector<string>?
1
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;}
                  }
Помогите разобраться
0
DU
1484 / 1130 / 45
Регистрация: 05.12.2011
Сообщений: 2,279
05.07.2012, 16:01 #8
а ошибки запостить сюда сложно?
может они из-за того, что вместо #include <string> у вас #include <cstring>
еще в функции sort нет return, хотя функция должна возвращать вектор строк.
0
gray_fox
What a waste!
1522 / 1227 / 70
Регистрация: 21.04.2012
Сообщений: 2,565
Завершенные тесты: 3
05.07.2012, 16:06 #9
Цитата Сообщение от RASHFor Посмотреть сообщение
vector<string> str; cin.getline(str);
Так не получится, getline читает строку, а не вектор string.
0
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,
а как надо?
0
gray_fox
What a waste!
1522 / 1227 / 70
Регистрация: 21.04.2012
Сообщений: 2,565
Завершенные тесты: 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 добавлять.
1
DU
1484 / 1130 / 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;
}
Вот еще раз заполните пустые тут функции согласно их сигнатурам и будет вам счастье
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' (или приемлемое преобразование отсутствует)


В чём ошибка?
0
gray_fox
What a waste!
1522 / 1227 / 70
Регистрация: 21.04.2012
Сообщений: 2,565
Завершенные тесты: 3
05.07.2012, 16:44 #14
Цитата Сообщение от RASHFor Посмотреть сообщение
str[i]
итератор это не индекс, это как указатель: что бы получить значение, нужно разыменовать:
C++
1
*i
1
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>
]
0
05.07.2012, 16:52
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
05.07.2012, 16:52
Привет! Вот еще темы с ответами:

Алгоритм сортировки Шелла - C++
http://lord-n.narod.ru/download/books/walla/programming/Spr_po_C/21/2107.htm здесь сказано, что существует, некая последовательность...

Не работает алгоритм сортировки - C++
Не работает алгоритм сортировки Ни при заполнении псевдослучайными числами,ни при заранее заданных. Подскажите пожалуйста, в чем...

Алгоритм квадратичной сортировки - C++
Доброго времени суток! есть вот такая задача: При составлении программы сортировки использовать минимальную необходимую память и...

Алгоритм сортировки,ошибка! - C++
У меня алгоритм сортировки вставками но вот только не сортирует почему то #include &lt;stdio.h&gt; #include &lt;stdlib.h&gt; #include...


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

Или воспользуйтесь поиском по форуму:
15
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.