Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.63/8: Рейтинг темы: голосов - 8, средняя оценка - 4.63
136 / 57 / 13
Регистрация: 04.09.2011
Сообщений: 1,956
Записей в блоге: 1
1

Не правильно работает код (отсортировать по алфавиту массив строк)

14.07.2012, 09:50. Просмотров 1635. Ответов 10
Метки нет (Все метки)

Вот задача: Отсортировать по алфавиту массив строк и вывести на экран, учитывать первый символ.

Пример:

Входные данные:
3 //количество строк
Анна
Василий
башня принцессы

Выходные:
Анна
башня принцессы
Василий
(STL пользоваться нельзя)
вот код:
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
#include <iostream>
#include <string>
using namespace std;
void bubbleSort(char*, int);
int main()
{
    char str[100];
    cin.get(str, 100, '$');
    int n = sizeof(str); 
    cout << "Massiv do sotr" << endl;
    cout << n << endl;
    for(int i=0; i<n; i++)
    cout << str[i];
    bubbleSort(str, n);
    cout << "Massiv polse sotr" << endl;
    for(int i=0; i<n; i++)
    cout << str[i];
 
 
system("pause");
return 0;
}
void bubbleSort(char* arr, int size)
{
    int tmp, i, j;
 
    for(i = 0; i < size - 1; ++i)
    {            
        for(j = 0; j < size - 1; ++j)
        {     
            if (arr[j + 1] < arr[j]) 
            {
                tmp = arr[j + 1]; 
                arr[j + 1] = arr[j]; 
                arr[j] = tmp;
            }
        }
    }
}
вот работы программы
что в это коде не правильно ?
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
14.07.2012, 09:50
Ответы с готовыми решениями:

Отсортировать массив из строк по алфавиту
1)Отсортировать массив из строк по алфавиту; С меня +++++++++ за каждую задачу!!!!З ...

Отсортировать массив строк по алфавиту. Учитывать только первый символ каждой строки
Задание: Отсортировать массив строк по алфавиту. Учитывать только первый символ каждой строки. ...

Дан массив из 4ех строк. Выдать на экран (для каждой строки) самое длинное слово и отсортировать эти слова по алфавиту.
Помогите, пожалуйста, с задачей. Дан массив из 4ех строк. Выдать на экран (для каждой строки) самое...

Отсортировать элементы массива строк по алфавиту
Понять задачу нужно) Я только начал проходить Паскаль ,Для изучения нашёл учебник , и там для...

10
60 / 45 / 12
Регистрация: 07.10.2011
Сообщений: 139
14.07.2012, 10:23 2
Прочитай про <string> и <cstring> они отличаются..
Ты просто объявил массив char, а надо было
C++
1
std::string str[100];
И считывать, например, так:
C++
1
2
for(int i = 0; i < 100; ++i)
std::cin >> str[i]
считывание было бы до первого перевода строки, т.е. вся строка, хранилась бы в 1 элементе массива str, причем этот элемент тоже является массивом.
0
136 / 57 / 13
Регистрация: 04.09.2011
Сообщений: 1,956
Записей в блоге: 1
14.07.2012, 11:14  [ТС] 3
Цитата Сообщение от yleart Посмотреть сообщение
Прочитай про <string> и <cstring> они отличаются..
Ты просто объявил массив char, а надо было
C++
1
std::string str[100];
И считывать, например, так:
C++
1
2
for(int i = 0; i < 100; ++i)
std::cin >> str[i]
считывание было бы до первого перевода строки, т.е. вся строка, хранилась бы в 1 элементе массива str, причем этот элемент тоже является массивом.
а как прервать ввод с помощью символа ? в это программе ?
0
606 / 406 / 8
Регистрация: 26.04.2012
Сообщений: 2,069
14.07.2012, 11:32 4
Цитата Сообщение от Sylar9 Посмотреть сообщение
а как прервать ввод с помощью символа ? в это программе ?
C++
1
2
while (cin>>str[i]!='$')
i++
0
Каратель
Эксперт С++
6593 / 4014 / 401
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
14.07.2012, 11:35 5
Цитата Сообщение от yleart Посмотреть сообщение
И считывать, например, так:
C++
1
2
for(int i = 0; i < 100; ++i)
std::cin >> str[i]
считывание было бы до первого перевода строки
это считывание до первого разделителя(пробела/табуляции/перевода строки)
считывание до перевода строки:
C++
1
 std::getline(cin, str[i]);
1
136 / 57 / 13
Регистрация: 04.09.2011
Сообщений: 1,956
Записей в блоге: 1
14.07.2012, 11:58  [ТС] 6
Цитата Сообщение от Jupiter Посмотреть сообщение
это считывание до первого разделителя(пробела/табуляции/перевода строки)
считывание до перевода строки:
C++
1
 std::getline(cin, str[i]);
компилятор ругается на !=? и не могу понять там должно быть два цикла
C++
1
2
3
for(int i = 0; i < 100; ++i)
while (cin>>str[i]!='$')
i++;
?
0
1311 / 973 / 267
Регистрация: 17.05.2012
Сообщений: 2,687
14.07.2012, 12:11 7
Может пригодится мой вариант решения

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
#include <iostream>  
using namespace std;
 
int main() 
{ 
    char str[] = " Real Arsenal Chelsea Barcelona "; 
    char* ptr;    
    char temp[10];
    char matrix[4][10];  
    int i = 0, j;
 
    ptr = strtok(str, " "); 
 
    while(ptr!=NULL) 
    {  
        for ( j = 0; j < strlen(ptr); j++) 
            matrix[i][j] = ptr[j]; 
        matrix[i][j] = '\0'; 
        i++;
        ptr = strtok(NULL, " "); 
    } 
 
    for ( i = 0; i < 4; i++) 
        for ( j = i+1; j < 4; j++)  
            if(strcmp(matrix[i], matrix[j]) > 0) 
            { 
                strcpy(temp, matrix[i]); 
                strcpy(matrix[i], matrix[j]); 
                strcpy(matrix[j], temp); 
            } 
   
            for ( i = 0; i < 4; i++) 
                cout << matrix[i] << " "; 
}
0
136 / 57 / 13
Регистрация: 04.09.2011
Сообщений: 1,956
Записей в блоге: 1
14.07.2012, 12:47  [ТС] 8
Вот я код исправил но одна проблема осталась, все слитно выодит как можно исправить ?
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 <iostream>
#include <cstring>
#include <locale.h>
using namespace std;
void bubbleSort(char*, int);
int main()
{
    setlocale(LC_ALL, "Rus");
    char str[100];
    int n = 0; 
    cout << "Введите строку, конец ввода символ $" << endl;
    for(int i=0; i<100; i++)
    {
        cin >> str[i]; 
        if(str[i] == '$') break;
        else ++n;
    }
    cout << "Массив до сортировки ...." << endl;
    cout << n << endl;
    for (int i=0; i<n; i++)
        cout << str[i];
    cout << "Массив после сортировки ...." << endl;
    bubbleSort(str, n);
    for (int i=0; i<n; i++)
    cout << str[i];
 
 
 
    system("pause");
    return 0;
}
void bubbleSort(char* arr, int size)
{
  char tmp;
  int i, j;
  for(i=0; i<size-1; ++i)
  {
    for (j=0; j<size-1; ++j)
    {
      if(arr[j+1] < arr[j])
      {
        tmp = arr[j+1];
        arr[j+1] = arr[j];
        arr[j] = tmp;
 
       }
    }
  
  }
 
}
Добавлено через 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
#include <iostream>
#include <string>
#include <locale.h>
using namespace std;
void bubbleSort(string*, int);
int main()
{
    setlocale(LC_ALL, "Rus");
    string str[100];
    int n = 0; 
    cout << "Введите строку, конец ввода символ $" << endl;
    for(int i=0; i<100; i++)
    {
        cin >> str[i]; 
        if(str[i] == '$') break;
        else ++n;
    }
    cout << "Массив до сортировки ...." << endl;
    cout << n << endl;
    for (int i=0; i<n; i++)
        cout << str[i];
    cout << "Массив после сортировки ...." << endl;
    bubbleSort(str, n);
    for (int i=0; i<n; i++)
    cout << str[i];
 
 
 
    system("pause");
    return 0;
}
void bubbleSort(string* arr, int size)
{
  char string;
  int i, j;
  for(i=0; i<size-1; ++i)
  {
    for (j=0; j<size-1; ++j)
    {
      if(arr[j+1] < arr[j])
      {
        tmp = arr[j+1];
        arr[j+1] = arr[j];
        arr[j] = tmp;
 
       }
    }
  
  }
 
}
только не могу понять как прервать ввод данные здесь
0
5472 / 4867 / 831
Регистрация: 04.06.2011
Сообщений: 13,587
14.07.2012, 12:56 9
Цитата Сообщение от Sylar9 Посмотреть сообщение
Вот рабочий код:
Как рабочий, если здесь:
if(str[i] == '$') break;
строка с символом сравнивается.
И в функции bubbleSort(), наверное, нужно не
char string;
, а string tmp;
0
136 / 57 / 13
Регистрация: 04.09.2011
Сообщений: 1,956
Записей в блоге: 1
14.07.2012, 13:12  [ТС] 10
Цитата Сообщение от alsav22 Посмотреть сообщение
Как рабочий, если здесь: строка с символом сравнивается.
я не могу понять как прервать ввод с помощью символа $, подскажите плиз очень нужно целый день сижу не фига в голову не лезит

Добавлено через 11 минут
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 <iostream>
#include <string>
#include <locale.h>
using namespace std;
void bubbleSort(string*, int);
int main()
{
    setlocale(LC_ALL, "Rus");
    string str[100];
    int n = 0; 
    cout << "Введите строку, конец ввода символ $" << endl;
    for(int i=0; i<100; i++)
    {
        cin >> str[i]; 
        if(str[i] == '$') break; // Здесь не правельно, я не знаю как править ввод с помощью символа 
        else ++n;
    }
    cout << "Массив до сортировки ...." << endl;
    cout << n << endl;
    for (int i=0; i<n; i++)
        cout << str[i];
    cout << "Массив после сортировки ...." << endl;
    bubbleSort(str, n);
    for (int i=0; i<n; i++)
    cout << str[i];
 
 
 
    system("pause");
    return 0;
}
void bubbleSort(string* arr, int size)
{
  char string;
  int i, j;
  for(i=0; i<size-1; ++i)
  {
    for (j=0; j<size-1; ++j)
    {
      if(arr[j+1] < arr[j])
      {
        tmp = arr[j+1];
        arr[j+1] = arr[j];
        arr[j] = tmp;
 
       }
    }
  
  }
 
}
0
5472 / 4867 / 831
Регистрация: 04.06.2011
Сообщений: 13,587
14.07.2012, 13:33 11
Добавлено через 1 минуту
Цитата Сообщение от Sylar9 Посмотреть сообщение
я не могу понять как прервать ввод с помощью символа $, подскажите плиз очень нужно целый день сижу не фига в голову не лезит
Исправить, то, что я написал.
код
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
#include <iostream>
#include <string>
#include <locale.h>
using namespace std;
void bubbleSort(string*, int);
int main()
{
    setlocale(LC_ALL, "Rus");
    string str[100];
    int n = 0; 
    cout << "Введите строку, конец ввода символ $" << endl;
    for(int i=0; i<100; i++)
    {
        cin >> str[i]; 
        if(str[i] == "$") break;
        else ++n;
    }
    cout << "Массив до сортировки ...." << endl;
    cout << n << endl;
    for (int i=0; i<n; i++)
        cout << str[i];
    cout << "Массив после сортировки ...." << endl;
    bubbleSort(str, n);
    for (int i=0; i<n; i++)
    cout << str[i];
 
    system("pause");
    return 0;
}
 
void bubbleSort(string* arr, int size)
{
  string tmp;
  int i, j;
  for(i=0; i<size-1; ++i)
  {
    for (j=0; j<size-1; ++j)
    {
      if(arr[j+1] < arr[j])
      {
        tmp = arr[j+1];
        arr[j+1] = arr[j];
        arr[j] = tmp;
      }
    }
  }
}
.

Добавлено через 11 минут
Но программа у вас сортирует не массив строк, а слова.

Добавлено через 7 минут
Вот так, нормально будет:
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
#include <iostream>
#include <string>
#include <locale.h>
using namespace std;
 
void bubbleSort(string*, int);
 
int main()
{
    setlocale(LC_ALL, "Rus");
    string str[100];
    int n = 0; 
    cout << "Введите строку, конец ввода символ $" << endl;
    for(int i=0; i<100; i++)
    {
        
        getline(cin, str[i]);
        if(str[i] == "$") break;
        else ++n;
    }
    cout << "Массив до сортировки ...." << endl;
    cout << n << endl;
    for (int i=0; i<n; i++)
        cout << str[i] << endl;
    cout << "Массив после сортировки ...." << endl;
    bubbleSort(str, n);
    for (int i=0; i<n; i++)
    cout << str[i] << endl;
 
    system("pause");
    return 0;
}
 
void bubbleSort(string* arr, int size)
{
  string tmp;
  int i, j;
  for(i=0; i<size-1; ++i)
  {
    for (j=0; j<size-1; ++j)
    {
      if(arr[j+1] < arr[j])
      {
        tmp = arr[j+1];
        arr[j+1] = arr[j];
        arr[j] = tmp;
      }
    }
  }
}
Для прерывания ввода, в пустой строке ввести $.
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
14.07.2012, 13:33

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь.

Массив символов. В процедуре отсортировать массив по алфавиту в обратном порядке
Ввести данные (тип данных указан в вариантах) с клавиатуры в виде «Х=», где i – индекс элемента. -...

Отсортировать несколько строк по алфавиту (с учетом/без учета регистра)
Вводится 6 строк в edit и нужно их отсортировать по алфавиту,отдельно стоит checkbox,если он...

Отсортировать массив по алфавиту
Дан массив W$(4, 3), в котором каждая строка состоит из четырёх символов, составляющих английское...

Дан файл строк. Отсортировать слова каждой строки файла по алфавиту
Дан файл строк. Отсортировать слова каждой строки файла по алфавиту с помощью сортировки пузырьком.


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

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

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