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

задача стоит так : Список фамилий вводится через запятую в виде строки. Упорядочить фамилии по алфавиту - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 9, средняя оценка - 4.67
Виkтория
 Аватар для Виkтория
1 / 1 / 0
Регистрация: 04.06.2013
Сообщений: 63
15.06.2013, 00:04     задача стоит так : Список фамилий вводится через запятую в виде строки. Упорядочить фамилии по алфавиту #1
Вот код :
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
46
47
48
49
50
51
 #include <stdio.h>
#include <string.h>
#include <conio.h>
#include <iostream>
 
 
using namespace std;
 
int Fam (char **boock,int n,char *str)
{  
    char*p=strtok(str, " ,");
       while (p!='\0')
    {   
        boock [n]=p;
        n++;
        p = strtok(NULL," ,");
    }
    char * temp;
     for (int i=0;i<n;i++)  
    {
        for (int j=0;j<n;j++) 
        
            if  (strcmp( boock[i], boock[j] )<0) 
                
             {
                temp=boock[j];
                boock[j]=boock[i];
                boock[i]=temp;
             }
    }
     for (int i = 0; i < n;i++) 
     
    {  
        cout << boock[i] << endl;
        getch();
    }
 return 0;  
}
 
int main()
{
  
  puts("Naberit' familii cherez komy: ");
  char str[100];  
  char* boock[100]; 
  gets(str);
  int c = 0;
  Fam(boock,c,str);
  cout<<endl;
  getch();
}

помогите здесь
C++
1
2
3
4
5
6
7
8
9
10
11
12
int main()
{
  
  puts("Naberit' familii cherez komy: ");
  char str[100];  
  char* boock[100]; 
  gets(str);
  int c = 0;
  Fam(boock,c,str);
  cout<<endl;
  getch();
}
там ошибка !! нужно сделать через массив насколько я поняла , и выделить динамическую память ((( буду очень благодарна !
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
15.06.2013, 00:04     задача стоит так : Список фамилий вводится через запятую в виде строки. Упорядочить фамилии по алфавиту
Посмотрите здесь:

Упорядочить слова по алфавиту (строки) C++
C++ Из списка фамилий упорядочить их по алфавиту
Упорядочить строки матрицы по алфавиту C++
Работа с символьными данными. Упорядочить фамилии по алфавиту C++
C++ Задача со строками (ввод списка фамилий через запятую в виде строки. Фамилии должны быть отсортированы по-алфавиту)
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
xtorne21st
интересующийся
300 / 271 / 19
Регистрация: 25.09.2010
Сообщений: 1,056
15.06.2013, 05:05     задача стоит так : Список фамилий вводится через запятую в виде строки. Упорядочить фамилии по алфавиту #2
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
#include <iostream>
#include <string>
#include <vector>
#include <algorithm>
#include <iterator>
 
int main()
{
    std::cout << "Naberit' familii cherez komy: ";
    std::string line;
    char ch;
    std::string surname;
    std::vector<std::string> surnameCont;
 
    while (std::cin.get(ch))
    {
        switch (ch)
        {
            case ',':
            case ' ':
            case '\t':
            case '\n':
                if (!surname.empty())
                {
                    surnameCont.push_back(surname);
                    surname.clear();
                }
                break;
            default:
                surname.push_back(ch);
                break;
        }
        if (ch == '\n')
        {
            break;
        }
    }
 
    std::sort(surnameCont.begin(), surnameCont.end());
    std::copy(surnameCont.begin(), surnameCont.end(), 
            std::ostream_iterator<std::string> (std::cout, " "));
    std::cout << std::endl;
}
Добавлено через 59 минут
Вот ещё вариант с ручным выделением памяти:
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
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
#include <iostream>
#include <cstring>
 
#define GUESS_WORD_SIZE 30
#define GUESS_WORDS_COUNT 20
 
void bsort(char** base, int sz)
{
    for (int i = 1; i < sz; ++i)
    {
        for (int j = sz-1; j >= i; --j)
        {
            if (strcmp(base[j], base[j-1]) < 0)
            {
                char* tmp = base[j];
                base[j] = base[j-1];
                base[j-1] = tmp;
            }
        }
    }
}
 
int main()
{
    std::cout << "Naberit' familii cherez komy: ";
    char word[GUESS_WORD_SIZE], ch;
    char** line = new char*[GUESS_WORDS_COUNT];
    char* p_word = word;
    int lineIndex = 0;
 
    word[0] = 0;
    while (std::cin.get(ch))
    {
        switch (ch)
        {
            case ',':
            case ' ':
            case '\t':
            case '\n':
                {
                    if (word[0])
                    {
                        *p_word = 0;
                        char* surname = new char[strlen(word)+1];
                        strcpy(surname, word);
                        line[lineIndex++] = surname;
                        p_word = &word[0];
                    }
                    word[0] = 0;
                }
                break;
            default:
                *p_word++ = ch;
                break;
        }
        if (ch == '\n')
        {
            break;
        }
    }
    line[lineIndex] = 0;
 
    bsort(line, lineIndex);
    for (int i = 0; line[i]; ++i)
    {
        std::cout << line[i] << ' ';
    }
    std::cout << std::endl;
 
    for (int i = 0; i < GUESS_WORDS_COUNT; ++i)
    {
        delete [] line[i];
    }
    delete [] line;
}
Виkтория
 Аватар для Виkтория
1 / 1 / 0
Регистрация: 04.06.2013
Сообщений: 63
20.06.2013, 22:43  [ТС]     задача стоит так : Список фамилий вводится через запятую в виде строки. Упорядочить фамилии по алфавиту #3
а можно как-то сделать без case !!? не менять код , просто конец переделать или подсказать как ??? пожалуйста
IGPIGP
Комп_Оратор)
 Аватар для IGPIGP
6172 / 2901 / 284
Регистрация: 04.12.2011
Сообщений: 7,722
Записей в блоге: 3
21.06.2013, 00:08     задача стоит так : Список фамилий вводится через запятую в виде строки. Упорядочить фамилии по алфавиту #4
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#include <iostream>
#include <string>
#include <vector>
#include <algorithm>
#include <iterator>
using namespace std;
int main(){
setlocale(0,"rus");
vector<string>vec;
cout<<"Введите фамилии (engl), разделённые запятыми и пробельными символами, \n(Enter, Cntrl+z - конец ввода)"<<endl;
copy(istream_iterator<string>(cin), istream_iterator<string>(), back_inserter(vec));
sort(vec.begin(), vec.end());
copy(vec.begin(), vec.end(), ostream_iterator<string>(cout,"\n"));
cout<<endl;
system("pause");
}
Issues
429 / 364 / 37
Регистрация: 06.08.2012
Сообщений: 961
21.06.2013, 00:17     задача стоит так : Список фамилий вводится через запятую в виде строки. Упорядочить фамилии по алфавиту #5
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
#include <algorithm>
#include <iostream>
#include <sstream>
#include <string>
#include <queue>
 
class SurComp {
public: bool operator()(std::string s1, std::string s2) {
        return s1 > s2;
    }
};
 
int main()
{
    std::string surname_str;
 
    std::cout << "Enter Surnames: ";
    std::getline(std::cin, surname_str);
 
    std::priority_queue<std::string, std::vector<std::string>, SurComp> surnames;
 
    std::istringstream iss(surname_str);
 
    std::string tmp_str;
    while (std::getline(iss, tmp_str, ','))
        surnames.push(tmp_str);
 
    for (; !surnames.empty(); surnames.pop())
        std::cout << surnames.top() << ", ";
    std::cout << std::endl;
 
    return 0;
}
MrGluck
Ворчун
Эксперт С++
 Аватар для MrGluck
4927 / 2670 / 243
Регистрация: 29.11.2010
Сообщений: 7,429
21.06.2013, 01:25     задача стоит так : Список фамилий вводится через запятую в виде строки. Упорядочить фамилии по алфавиту #6
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#include <iostream>
#include <sstream>
#include <string>
#include <set>
 
int main()
{
    std::string str, word;
    std::cout << "Enter str: ";
    std::getline(std::cin, str);
    std::istringstream ist(str);
    std::multiset<std::string> words;
    while (std::getline(ist, word, ',') )
        words.insert(word);
    for (auto &w : words)
        std::cout << w << " ";
}
IGPIGP
21.06.2013, 01:44
  #7

Не по теме:

MrGluck, vs algorithm'ом упорядочено получается. И for в for each в 2008-й студии переделывать приходится.

MrGluck
Ворчун
Эксперт С++
 Аватар для MrGluck
4927 / 2670 / 243
Регистрация: 29.11.2010
Сообщений: 7,429
21.06.2013, 02:05     задача стоит так : Список фамилий вводится через запятую в виде строки. Упорядочить фамилии по алфавиту #8
IGPIGP, так вроде и требуется
Цитата Сообщение от IGPIGP Посмотреть сообщение
Упорядочить фамилии по алфавиту
а цикл поменять это уже ТС-у, если надо будет. Не самая сложная вещь для понимания, а надо же что-нибудь ей сделать.
IGPIGP
21.06.2013, 02:09
  #9

Не по теме:

Цитата Сообщение от MrGluck Посмотреть сообщение
IGPIGP, так вроде и требуется
Дык, без библиотеки algorithm не упорядочивает нормально. Вродь как сравнение строк идет поразному, понимаешь?

MrGluck
Ворчун
Эксперт С++
 Аватар для MrGluck
4927 / 2670 / 243
Регистрация: 29.11.2010
Сообщений: 7,429
21.06.2013, 02:12     задача стоит так : Список фамилий вводится через запятую в виде строки. Упорядочить фамилии по алфавиту #10
IGPIGP, мне казалось, что объявление
C++
1
bool operator< (const std::string &, const std::string &)
находится в зедере string, т.к. вроде бы с ним и идет работа. Возможно, в VS это определяется в algorithm, не знаю. На mingw все нормально.
IGPIGP
21.06.2013, 02:14
  #11

Не по теме:

Цитата Сообщение от MrGluck Посмотреть сообщение
На mingw все нормально.
Наверное.

MrGluck
Ворчун
Эксперт С++
 Аватар для MrGluck
4927 / 2670 / 243
Регистрация: 29.11.2010
Сообщений: 7,429
21.06.2013, 02:14     задача стоит так : Список фамилий вводится через запятую в виде строки. Упорядочить фамилии по алфавиту #12
IGPIGP, сейчас проверил в VS10, все нормально без algorithm считает
IGPIGP
Комп_Оратор)
 Аватар для IGPIGP
6172 / 2901 / 284
Регистрация: 04.12.2011
Сообщений: 7,722
Записей в блоге: 3
21.06.2013, 02:22     задача стоит так : Список фамилий вводится через запятую в виде строки. Упорядочить фамилии по алфавиту #13
Цитата Сообщение от MrGluck Посмотреть сообщение
проверил в VS10, все нормально
Неужто 8-мая так отстала? Вот (закоментил #include <algoritnm>):
Миниатюры
задача стоит так :  Список фамилий вводится через запятую в виде строки. Упорядочить фамилии по алфавиту  
Виkтория
 Аватар для Виkтория
1 / 1 / 0
Регистрация: 04.06.2013
Сообщений: 63
21.06.2013, 02:29  [ТС]     задача стоит так : Список фамилий вводится через запятую в виде строки. Упорядочить фамилии по алфавиту #14
ого ...а можно без str ??? просто на блок-схеме..вообще не понятно как делать все это (((((((
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
21.06.2013, 05:55     задача стоит так : Список фамилий вводится через запятую в виде строки. Упорядочить фамилии по алфавиту
Еще ссылки по теме:

C++ ввести список из 10 фамилий, расположенных в произвольном порядке и упорядочить их по алфавиту
C++ Строки. [Ввести список фамилий,упорядочить по алфавиту]
Строки данного файла упорядочить по алфавиту C++

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

Или воспользуйтесь поиском по форуму:
IGPIGP
Комп_Оратор)
 Аватар для IGPIGP
6172 / 2901 / 284
Регистрация: 04.12.2011
Сообщений: 7,722
Записей в блоге: 3
21.06.2013, 05:55     задача стоит так : Список фамилий вводится через запятую в виде строки. Упорядочить фамилии по алфавиту #15
Цитата Сообщение от Виkтория Посмотреть сообщение
ого , а str ..это обьязательно !???
В левом верхнем углу str?
Необязательно. В тексте приглашение такое, просто. Можете там изменить на что-то другое. Например: "Type, the name list, please....."
Если у Вас 2008-я и компилите в пустом проекте (без прекомпилированых заголовков), то в обсуждаемом варианте советую подключить #include<algorithm>


Добавлено через 9 минут
Цитата Сообщение от Виkтория Посмотреть сообщение
просто на блок-схеме..вообще не понятно как делать все это
A-a... Понял. Да, тут блок-схема состоит из ввода, описания применения используемых библиотек и вывода. Неужели, такое задание дали до изучения string?

Добавлено через 3 часа 10 минут
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
46
47
48
49
50
51
52
53
54
55
56
57
58
59
#include <stdio.h>
#include <string.h>
#include <conio.h>
#include <iostream>
using namespace std;
 
void swapStr(char **word1, char **word2){
char *word=*word1;
*word1=*word2;
*word2=word;
}
 
int main()
{  
 cout<<"Naberit' familii cherez komy: ";
 char str[1000]; 
 char* words[100];
cin>>str;
cout<<str<<endl;
char seps[]   = " ,.!?\t\n";//добавьте, что захотите
char *token;
int str_count=0;
 
token = strtok( str, seps );
char* currentStr=0;
int lenWord=0;
while( token != NULL )
   {
currentStr=token;     
  
lenWord=strlen(currentStr);//чтобы перевести нужно обратиться
words[str_count] = new char(lenWord+1);
strcpy(words[str_count],currentStr);
      token = strtok( NULL, seps );
      str_count++;
   }
cout<<str_count<<endl;//посчитали слова
for(int i=0; i<str_count; ++i) cout<<words[i]<<" ";
 
int badSort=0;
 cout<<endl;
 cout<<endl;
do{
 badSort=0;
 for(int i=0; i<str_count-1; ++i){
     if(strcmp(words[i+1],words[i])<0){
swapStr(&words[i], &words[i+1]);
badSort=1;
break;
    }
 }
 
}while(badSort);
 cout<<endl;
cout<<"\nsorted"<<endl;
for(int i=0; i<str_count; ++i) cout<<words[i]<<" ";
 cout<<endl;
 getch();
}
Вот без стрингов.
Yandex
Объявления
21.06.2013, 05:55     задача стоит так : Список фамилий вводится через запятую в виде строки. Упорядочить фамилии по алфавиту
Ответ Создать тему

Метки
упорядочить массив, упорядочить массив c++, упорядочить по алфавиту c++, упорядочить по алфавиту
Опции темы

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