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

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

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 9, средняя оценка - 5.00
deface
0 / 0 / 0
Регистрация: 30.01.2012
Сообщений: 14
#1

Строки - C++

30.01.2012, 18:50. Просмотров 1172. Ответов 10
Метки нет (Все метки)

Преобразовать строку таким образом, чтобы сначала в ней были напечатаны только буквы, а потом только цифры, не меняя порядка следования символов в строке.

заранее спасибо!!!
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
30.01.2012, 18:50     Строки
Посмотрите здесь:

C++ Элементы, у которых сумма номеров строки и столбца четные оставить без изменения, а остальные разделить на максимальный по модулю элемент строки
Строки. Работа с каждым словом строки. C++
C++ Центрирование - расположение строки s1 посередине строки s2 длины L.
C++ Строки в с++. После строки выводятся не понятные символы
C++ В прямоугольной матрице выявить все строки, у которых максимальный элемент превосходит сумму остальных элементов строки
Строки. Удалить из строки S1 последнюю подстроку, совпадающую с S2 C++
Из заданной пользователем строки сформулируйте новую, добавив пробел перед каждым символом строки кроме пробела C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
go
Эксперт C++
3586 / 1366 / 128
Регистрация: 16.04.2009
Сообщений: 4,528
30.01.2012, 19:22     Строки #2
C++
1
2
3
4
5
6
7
8
9
10
#include <iostream>
#include <algorithm>
#include <ctype.h>
 
int main()
{
   std::string s("a123bc4d5ee");
   std::stable_sort(std::begin(s), std::end(s), [] (int i, int j) { return ((isalpha(i)) && (!isalpha(j))); });
   std::cout << s << std::endl;
}
http://liveworkspace.org/code/bb749e...86c36b13162d5c

Добавлено через 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
#include <stdio.h>
#include <string.h>
#include <ctype.h>
 
int fun(int val) 
{
   if ( isalpha(val) )
      return 0;
   return 1;
}
 
void My_sort(char* first, char* last, int (*Pred) (int )) 
{
   char t, *right, *tt;
   for ( right = last ; (right > first) && Pred(*(right - 1)) ; --right )
      ;
   for ( ; first < right ; ++first )
      if ( Pred(*first) )
      {
         t = *first; 
         for ( tt = first + 1 ; (tt != right) && Pred(*tt) ; ++tt )
            ;
         *first = *(tt);
         *(tt) = t;
         right -= Pred(*(right - 1)) ? 1 : 0;
      }
}
 
int main(void)
{
   char arr[] = "a123bc4d5ee";
 
   My_sort(arr, arr + strlen(arr), fun);
   printf ("%s\n", arr);
 
   return 0;
}
http://liveworkspace.org/code/3ae906...728c7761d27cdf
deface
0 / 0 / 0
Регистрация: 30.01.2012
Сообщений: 14
30.01.2012, 20:03  [ТС]     Строки #3
огромное спасибо

Добавлено через 23 минуты
go, подскажи почему когда я добавляю system ("PAUSE") программа не запускается
Gepar
1175 / 531 / 20
Регистрация: 01.07.2009
Сообщений: 3,516
30.01.2012, 20:10     Строки #4
Цитата Сообщение от deface Посмотреть сообщение
go, подскажи почему когда я добавляю system ("PAUSE") программа не запускается
потому что чтобы она потом компилировалась нужно добавить ещё
C
1
#include <windows.h>
go
Эксперт C++
3586 / 1366 / 128
Регистрация: 16.04.2009
Сообщений: 4,528
30.01.2012, 20:23     Строки #5
Цитата Сообщение от Gepar Посмотреть сообщение
потому что чтобы она потом компилировалась нужно добавить ещё
Не в коем случае!
C++
1
#include <cstdlib>
Dekio
Фрилансер
Эксперт C++
5819 / 1217 / 214
Регистрация: 23.11.2010
Сообщений: 3,378
Записей в блоге: 1
30.01.2012, 20:23     Строки #6
Цитата Сообщение от go Посмотреть сообщение
return ((isalpha(i)) && (!isalpha(j)));
C++
1
return isalpha(i) && !isalpha(j);
Gepar
1175 / 531 / 20
Регистрация: 01.07.2009
Сообщений: 3,516
30.01.2012, 20:37     Строки #7
go, так ваш вариант на с++ меняет же порядок символов, впрочем сишный тоже это делает, да и зачем вообще что-либо сортировать?
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
int main()
{
    char *str="1bla 123 bla bla b4la bla";
    char *temp=str;
    while(*temp)
     if(isalpha(*temp++))
      cout<<*(temp-1);
 
    cout<<endl;
    temp=str;
    while(*temp)
     if(isdigit(*temp++))
      cout<<*(temp-1);
}
Добавлено через 47 секунд
В чистий си пусть автор сам переделывает мой код (если он ему нужен), не люблю printf.

Добавлено через 1 минуту
Цитата Сообщение от go Посмотреть сообщение
Не в коем случае!
Ну у меня такая привычка так как в windows.h подключен уже csdlib.
go
Эксперт C++
3586 / 1366 / 128
Регистрация: 16.04.2009
Сообщений: 4,528
30.01.2012, 22:01     Строки #8
Цитата Сообщение от Gepar Посмотреть сообщение
так ваш вариант на с++ меняет же порядок символов,
Пример пожалуйста!
Цитата Сообщение от Gepar Посмотреть сообщение
Ну у меня такая привычка так как в windows.h подключен уже csdlib.
Отвыкайте
Цитата Сообщение от Gepar Посмотреть сообщение
да и зачем вообще что-либо сортировать?
А как еще? Да и сортировка тут "хитрая".

Добавлено через 1 час 20 минут
Цитата Сообщение от Gepar Посмотреть сообщение
В чистий си пусть автор сам переделывает мой код (если он ему нужен), не люблю printf.
Автору такой вариант не подходит. Читайте внимательно
Цитата Сообщение от deface Посмотреть сообщение
Преобразовать строку таким образом,
Vergil111
31 / 31 / 6
Регистрация: 30.11.2010
Сообщений: 81
30.01.2012, 23:49     Строки #9
Еще можно так
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
#include "stdafx.h"
#include <iostream>
#include <algorithm>
#include <string>
 
using namespace std;
 
int _tmain(int argc, _TCHAR* argv[])
{
    string test("ab213c3d4");
    stable_partition(test.begin(), test.end(), isalpha);
    cout << test << endl;
    return 0;
}
Gepar
1175 / 531 / 20
Регистрация: 01.07.2009
Сообщений: 3,516
01.02.2012, 00:18     Строки #10
Цитата Сообщение от go Посмотреть сообщение
Автору такой вариант не подходит. Читайте внимательно
Цитата Сообщение от deface Посмотреть сообщение
Преобразовать строку таким образом, чтобы сначала в ней были напечатаны только буквы, а потом только цифры, не меняя порядка следования символов в строке.
Мне кажется что здесь имелось в виду просто напечатать строку, а оригинальную не менять, хотя может это задание и нужно трактовать по другому, я не уверен.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
02.02.2012, 10:18     Строки
Еще ссылки по теме:

C++ Матрица m x n. Найти макс значение среди средних значений для каждой строки матрицы. Вернуть номер строки
C++ Дополнить строки знаками "+", чтобы все строки в нем имели длину 80 символов
C++ Создать новые строки, содержащие цифры, буквы, а также знаки пунктуации, выбранные из введенной строки
Заменить элемент строки, лежащий на главной диагонали, произведением чётных положительных чисел этой строки C++
C++ Добавлять в исходную строку заданной длины новые строки, пока не будет превышен размер исходной строки

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

Или воспользуйтесь поиском по форуму:
go
Эксперт C++
3586 / 1366 / 128
Регистрация: 16.04.2009
Сообщений: 4,528
02.02.2012, 10:18     Строки #11
Цитата Сообщение от Gepar Посмотреть сообщение
Мне кажется что здесь имелось в виду просто напечатать строку,
Хотя бы одно слово печать в задании есть??? Не нужно выдумывать новое задание...

Gepar,
Цитата Сообщение от go Посмотреть сообщение
Пример пожалуйста!
Так я дождусь примера?!
Yandex
Объявления
02.02.2012, 10:18     Строки
Ответ Создать тему
Опции темы

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