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

строки - C++

Восстановить пароль Регистрация
 
игорь г
1 / 1 / 0
Регистрация: 29.09.2009
Сообщений: 44
10.05.2011, 19:42     строки #1
Составить программу на языке С++ которая преобразовывает строку так, чтобы все цифры в ней были отсортированы по убыванию.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
10.05.2011, 19:42     строки
Посмотрите здесь:

Добавить в конец первой строки, последние n2-n1 слов второй строки C++
C++ Скопировать второе слово каждой строки в начало следующей строки
Из символов введенной строки сформировать две строки - из цифр и букв C++
c++ Даны две строки: S1 и S2. Определить количество вхождений строки S2 в строку S1. C++
C++ Найти номер строки матрицы, наиболее отдаленный от первой строки
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
grrrrr
 Аватар для grrrrr
45 / 45 / 7
Регистрация: 21.04.2009
Сообщений: 265
10.05.2011, 20:21     строки #2
строка символов или строка из чисел(числовой массив)? Если второе, то это просто, если первое, надо подумать..
olleg90
 Аватар для olleg90
34 / 34 / 6
Регистрация: 06.01.2011
Сообщений: 90
10.05.2011, 20:37     строки #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
#include <iostream>
using namespace std;
void main()
{ char line[80];
cout<<"INPUT STRING"<<endl;
gets(line);
int fl=1,tmp=-1;
char c;
while (fl!=0)
{fl=0;
for(int i=0;i<strlen(line);i++)
{
if (isdigit(line[i])&&tmp>-1&&line[tmp]>line[i])
{c=line[tmp];
line[tmp]=line[i];
line[i]=c;
fl=1;
}
if (isdigit (line[i])) tmp=i;
}
}
cout<<line<<endl;
system("pause");
}
может не работать ибо не на чем проверить
Nursik77
 Аватар для Nursik77
273 / 233 / 21
Регистрация: 05.04.2011
Сообщений: 645
10.05.2011, 20:41     строки #4
Если использую массивы, то так:
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
#include <stdio.h> 
#include <stdlib.h> 
#include <conio.h> 
main() 
{ 
  int m,k,i,n=10; 
  int xmin,x[]={5,1,3,2,4,0,6,9,8,7};
  clrscr(); 
 
  printf("\nElements of unsorted array:");
  for (k=0; k<n; k++) 
  printf(" %i",x[k]); 
 
  for (k=0; k<n-1; k++) 
  { xmin=x[k];m=k; 
    for (i=k+1; i<n; i++) 
      if (x[i] > xmin)
     {xmin=x[i]; m = i;} 
    x[m]=x[k]; x[k]=xmin; 
  } 
 printf("\nElements of sorted array:  ");
  for (k=0; k<10; k++) 
    printf(" %i",x[k]); 
getch(); 
}
igorrr37
 Аватар для igorrr37
1593 / 1221 / 118
Регистрация: 21.12.2010
Сообщений: 1,868
Записей в блоге: 7
10.05.2011, 20:41     строки #5
C++
1
2
3
4
5
6
7
8
9
10
11
#include<iostream>
#include<functional>
#include<string>
#include<algorithm>
 
int main (){
    std::string s="51423";
    std::sort(s.begin(), s.end(), std::greater<char>());
    std::cout<<s<<"\n";
    return 0;
}
ЛеЖиК)
 Аватар для ЛеЖиК)
157 / 60 / 1
Регистрация: 29.04.2011
Сообщений: 630
11.05.2011, 11:23     строки #6
Цитата Сообщение от igorrr37 Посмотреть сообщение
std::greater<char>()
а что это делаеет?
rangerx
1908 / 1517 / 139
Регистрация: 31.05.2009
Сообщений: 2,876
11.05.2011, 12:42     строки #7
а что это делаеет?
Это функтор. В двух словах, std::greater это класс у кторого перегружен operator() благодоря чему его объект может "притворяться" функцией.
Одна из перегрузок функции std::sort выглядит так
C++
1
2
template <class RandomAccessIterator, class Compare>
void sort ( RandomAccessIterator first, RandomAccessIterator last, Compare comp );
Третий параметр comp является шаблонным параметром. Передать туда ты можешь что угодно, главное чтобы это "что угодно" можно было вызвать как функцию comp(элемент1, элемент2) внутри функции std::sort.
В данном случае в качестве третьего параметра передаётся объект класса std::greater(std::greater<char>() это вызов конструктора) перегруженный operator() которого будет производить сравнение элементов при сортировке. Преимущество функторов перед указателями на функциии заключается в том, что компилятор может легко оптимизировать код сделав operator() встроенным(inline).
ЛеЖиК)
 Аватар для ЛеЖиК)
157 / 60 / 1
Регистрация: 29.04.2011
Сообщений: 630
11.05.2011, 12:46     строки #8
если я правельно понял, то
C++
1
greater<char>()
работает так же как

C++
1
2
3
4
int comp(const void *i, const void *j) // сортируем
{
  return *(int *)i - *(int *)j;
}
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
11.05.2011, 13:02     строки
Еще ссылки по теме:

C++ Поменять первый элемент строки с максимальным элементом этой строки
C++ Упорядочить строки матрицы лексикографически по неубыванию первых k элементов строки.
Даны три строки: S1, S2, S3. Заменить в строке S1 первое вхождение строки S2 на S3 C++

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

Или воспользуйтесь поиском по форуму:
rangerx
1908 / 1517 / 139
Регистрация: 31.05.2009
Сообщений: 2,876
11.05.2011, 13:02     строки #9
Да. std::greater выполняет роль функции сравнения элементов, но благодоря встраиванию функция std::sort с переданным ей функтором
C++
1
std::sort(array, array+SIZE, std::greater<int>())
должна отработать на порядок быстрее, чем та же qsort с переданным ей указателем на функцию
C
1
qsort(array, SIZE, sizeof(int), comp);
Yandex
Объявления
11.05.2011, 13:02     строки
Ответ Создать тему
Опции темы

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