Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.55/11: Рейтинг темы: голосов - 11, средняя оценка - 4.55
139 / 60 / 13
Регистрация: 04.09.2011
Сообщений: 1,956
Записей в блоге: 1

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

14.07.2012, 09:50. Показов 2392. Ответов 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
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
14.07.2012, 09:50
Ответы с готовыми решениями:

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

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

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

10
 Аватар для yleart
60 / 45 / 12
Регистрация: 07.10.2011
Сообщений: 139
14.07.2012, 10:23
Прочитай про <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
139 / 60 / 13
Регистрация: 04.09.2011
Сообщений: 1,956
Записей в блоге: 1
14.07.2012, 11:14  [ТС]
Цитата Сообщение от 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
 Аватар для Troll_Face
608 / 406 / 8
Регистрация: 26.04.2012
Сообщений: 2,065
14.07.2012, 11:32
Цитата Сообщение от Sylar9 Посмотреть сообщение
а как прервать ввод с помощью символа ? в это программе ?
C++
1
2
while (cin>>str[i]!='$')
i++
0
Каратель
Эксперт С++
6610 / 4029 / 401
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
14.07.2012, 11:35
Цитата Сообщение от yleart Посмотреть сообщение
И считывать, например, так:
C++
1
2
for(int i = 0; i < 100; ++i)
std::cin >> str[i]
считывание было бы до первого перевода строки
это считывание до первого разделителя(пробела/табуляции/перевода строки)
считывание до перевода строки:
C++
1
 std::getline(cin, str[i]);
1
139 / 60 / 13
Регистрация: 04.09.2011
Сообщений: 1,956
Записей в блоге: 1
14.07.2012, 11:58  [ТС]
Цитата Сообщение от 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
 Аватар для David Sylva
1321 / 983 / 267
Регистрация: 17.05.2012
Сообщений: 2,687
14.07.2012, 12: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
#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
139 / 60 / 13
Регистрация: 04.09.2011
Сообщений: 1,956
Записей в блоге: 1
14.07.2012, 12:47  [ТС]
Вот я код исправил но одна проблема осталась, все слитно выодит как можно исправить ?
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
5500 / 4895 / 831
Регистрация: 04.06.2011
Сообщений: 13,587
14.07.2012, 12:56
Цитата Сообщение от Sylar9 Посмотреть сообщение
Вот рабочий код:
Как рабочий, если здесь:
if(str[i] == '$') break;
строка с символом сравнивается.
И в функции bubbleSort(), наверное, нужно не
char string;
, а string tmp;
0
139 / 60 / 13
Регистрация: 04.09.2011
Сообщений: 1,956
Записей в блоге: 1
14.07.2012, 13:12  [ТС]
Цитата Сообщение от 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
5500 / 4895 / 831
Регистрация: 04.06.2011
Сообщений: 13,587
14.07.2012, 13:33
Добавлено через 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
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
14.07.2012, 13:33
Помогаю со студенческими работами здесь

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

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

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

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

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


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

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
Новые блоги и статьи
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
Символьное дифференцирование
igorrr37 13.02.2026
/ * Программа принимает математическое выражение в виде строки и выдаёт его производную в виде строки и вычисляет значение производной при заданном х Логарифм записывается как: (x-2)log(x^2+2) -. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL3_image
8Observer8 10.02.2026
Содержание блога Библиотека SDL3_image содержит инструменты для расширенной работы с изображениями. Пошагово создадим проект для загрузки изображения формата PNG с альфа-каналом (с прозрачным. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru