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

Указатели в строчном массиве - C++

Восстановить пароль Регистрация
 
Guneska
0 / 0 / 0
Регистрация: 05.12.2012
Сообщений: 26
16.01.2013, 23:23     Указатели в строчном массиве #1
Помогите, пожалуйста с лабораторной. Ну никак мне эти указатели не влазят в голову , может с вашей подсказкой на примере своей лабораторной я смогу наконец-то понять принцип их использования.
Задача такая: используя динамическое выделение памяти создать программу, которая отсортировала бы строку, которая содержит цифры и буквы латинского алфавита (и строчные и прописные), в последовательности: сначала цифры, затем буквы, НЕ МЕНЯЯ их положения в строке. Например: введена строка - qwE25Rty88U, а в результате нужно получить: 2588qwERtyU.
Очень надеюсь на вашу помощь!
Лучшие ответы (1)
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
lemegeton
 Аватар для lemegeton
2910 / 1339 / 133
Регистрация: 29.11.2010
Сообщений: 2,720
17.01.2013, 01:40     Указатели в строчном массиве #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
44
45
46
47
48
49
50
51
52
53
54
55
56
#include <iostream>
 
bool contains(char *string, char symbol) {
  while (*string != '\0') {
    if (*string++ == symbol) {
      return true;
    }
  }
  return false;
}
 
char *findFirstOf(char *string, char *symbols) {
  for (; *string != '\0'; ++string) {
    if (contains(symbols, *string)) {
      return string;
    }
  }
  return string;
}
 
char *findFirstNotOf(char *string, char *symbols) {
  for (; *string != '\0'; ++string) {
    if (!contains(symbols, *string)) {
      return string;
    }
  }
  return string;
}
 
int main()
{
  char string[] = "qwE25Rty88U";
  char digits[] = "0123456789";
 
  std::cout << string << std::endl;
 
  char *symbol = string;
  char *digit = string;
  do {
    symbol = findFirstNotOf(string, digits);
    digit = findFirstOf(symbol, digits);
 
    if (*digit != '\0' && *symbol != '\0') {
      char tmp = *digit;
      for (char *c = digit; c > symbol; --c) {
        *c = *(c - 1);
      }
      *symbol = tmp;
    }
  } while (*digit != '\0' && *symbol != '\0');
 
  std::cout << string << std::endl;
 
  std::cin.get();
  return 0;
}
Guneska
0 / 0 / 0
Регистрация: 05.12.2012
Сообщений: 26
17.01.2013, 21:34  [ТС]     Указатели в строчном массиве #3
lemegeton, Спасибо вам большое, но для меня то что Вы написали пока тёмный лес, да и преподаватель увидит что это не мой уровень, и заставит объяснять что и к чему. При чём работаем мы в Borland C++ 3.1 for Windows, DOS, год выпуска: 1991-1992. Вот код, который я смогла набрать, - элементарщина, вывод массива - получилось, попыталась разобраться с динамической памятью, и всё заглохло :(
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#include <iostream.h>
#include <conio.h>
#include <string.h>
#include <stdlib.h>
 
void main()
{
int i,n;
char*x;
char s1[]={'1','2','3','4','5','6','7','8','9','0','q','w','e','r','t','y','u','i','o','p','a','s','d','f','g','h','j','k','l','z','x','c','v','b','n','m'};
cout<<"Vvedite massiv: " << endl;
cin>>s1;
{
char *x=new char[n];
}
for(i=0; i<x; i++);
cout<<x;
getch();
}
Croessmah
Модератор
Эксперт С++
 Аватар для Croessmah
11845 / 6824 / 771
Регистрация: 27.09.2012
Сообщений: 16,919
Записей в блоге: 2
Завершенные тесты: 1
17.01.2013, 22:02     Указатели в строчном массиве #4
Сообщение было отмечено автором темы, экспертом или модератором как ответ
Это нужно?
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#include <iostream>
#include <cstring>
 
int main(){
    char str[]="abc346dse8g9h1011";
    int size=strlen(str);
    char * dest=new char[size+1];
    dest[size]=0;
    int pos=0;
    for(int i=0;i<size;++i)
        if(isdigit(str[i]))
            dest[pos++]=str[i];
    for(int i=0;i<size;++i)
        if(isalpha(str[i]))
            dest[pos++]=str[i];
    std::cout<<"Source: "<<str<<"\n";
    std::cout<<"Rezult: "<<dest<<std::endl;
    return 0;
}
Название: Безымянный.jpg
Просмотров: 42

Размер: 12.7 Кб
проще, наверное, некуда
Guneska
0 / 0 / 0
Регистрация: 05.12.2012
Сообщений: 26
21.01.2013, 22:12  [ТС]     Указатели в строчном массиве #5
Croessmah, да, Вы правы, код такой, только символы нужно будет вводить с клавиатуры, а не выводить заранее вписанные. Сейчас бьюсь над этим, но увы, результатов пока ноль.
Greenli
 Аватар для Greenli
7 / 7 / 1
Регистрация: 21.01.2013
Сообщений: 27
21.01.2013, 22:18     Указатели в строчном массиве #6
Guneska, используй getline для заполнения массива типа char.


можно так

C++
1
2
3
    
cin.sync();
getline(cin,str);
Guneska
0 / 0 / 0
Регистрация: 05.12.2012
Сообщений: 26
21.01.2013, 22:45  [ТС]     Указатели в строчном массиве #7
Greenli, опа, с таким ещё не сталкивалась. А куда эти операторы (или функции; не пинайте сильно, изучаю С++ на начальном этапе) вставлять? Подскажите, если не сложно, а то голова уже квадратная, если снова полезу в гугл искать где cin.sync(); и getline(cin,str); применяются и зачем, то боюсь застряну надолго
Croessmah
Модератор
Эксперт С++
 Аватар для Croessmah
11845 / 6824 / 771
Регистрация: 27.09.2012
Сообщений: 16,919
Записей в блоге: 2
Завершенные тесты: 1
21.01.2013, 23:05     Указатели в строчном массиве #8

Не по теме:

Цитата Сообщение от Greenli Посмотреть сообщение
cin.sync();
Это зачем?



C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#include <iostream>
#include <cstring>
#include <cctype>
 
int main(){
    char str[1024];
     std::cin>>str;//std::cin.getline(str,1024);     
    int size=strlen(str);
    char * dest=new char[size+1];
    dest[size]=0;
    int pos=0;
    for(int i=0;i<size;++i)
        if(isdigit(str[i]))
            dest[pos++]=str[i];
    for(int i=0;i<size;++i)
        if(isalpha(str[i]))
            dest[pos++]=str[i];
    std::cout<<"Source: "<<str<<"\n";
    std::cout<<"Rezult: "<<dest<<std::endl;
    return 0;
}
Guneska
0 / 0 / 0
Регистрация: 05.12.2012
Сообщений: 26
21.01.2013, 23:11  [ТС]     Указатели в строчном массиве #9
Croessmah, спасибо, я так и сделала, после char str добавила cin>>str; и всё получилось. Спасибо большое!
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
21.01.2013, 23:13     Указатели в строчном массиве
Еще ссылки по теме:

Найти сумму положительных элементов в массиве через указатели C++
Проверка на скобки в строчном калькуляторе C++
Указатели на объекты в массиве C++

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

Или воспользуйтесь поиском по форуму:
Greenli
 Аватар для Greenli
7 / 7 / 1
Регистрация: 21.01.2013
Сообщений: 27
21.01.2013, 23:13     Указатели в строчном массиве #10
Опередили =)
Yandex
Объявления
21.01.2013, 23:13     Указатели в строчном массиве
Ответ Создать тему
Опции темы

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