Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.68/25: Рейтинг темы: голосов - 25, средняя оценка - 4.68
419 / 418 / 72
Регистрация: 27.05.2012
Сообщений: 1,168
1

тройные указатели!

07.06.2012, 16:07. Показов 5114. Ответов 6
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Доброго дня господа! Прошу помочь разобраться - задача на чистом Си, работать с массивами и строками только через указатели. Имееются слова в строке разделённые пробелом необходимо эти слова, собственно определив их по пробелу, загнать в двухуровненый массив из символьных подмассивов...вот что надумал...
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
void stringToarray(char *string)
{
char mas[15];
const int size=2;
//двухуровневый массив
char **array=new char*[size];
for(int i=0; i<size; i++){
    *(array+i)=new char[15];
}
 
   int i=0;
   int j=0;
   char *p=NULL;
//указатель на стринг ставится в начало стринг
   p=string;
    i=0;
 while(*p){//пока не конец строки
                while(*p!=' ')//пока не пробел
                              **array++=*p++;//из str должно копироваться в char подмассив array   
/*вот здесь проблема- array++ - это понятно, сдвиг указателя массива верхнего уровня. А вот что сдвигается **words++= ... ? Для движения по буквам слова нужен еще один указатель, array  не может двигаться по словам и по буквам слов одновременно. И как же сделать? ***array++=*p++;? но так ошибка*/
                array++;//переход к следущему подмассиву
                p++;//переход на следущий символ строки
                }
 
   i=0;
   j=0;
 
   for(int i=0; i<size; i++)
       delete *(array+i);
   delete[] array;
}
прошу пожалуйста помощи
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
07.06.2012, 16:07
Ответы с готовыми решениями:

Указатели и указатели на указатели, а также типы данных
Недавно начал изучать Си, перешел с Delphi. Много непонятного и пока процесс идет медленно....

Почему Лафоре использует указатели на указатели, вместо обмена значениями указателей?
Доброго времени суток! Задался теоретическим вопросом. Читал пример из книги Лафоре...

Через указатели на указатели посчитать сумму двух чисел и записать в третье
1. Через указатели на указатели посчитать сумму двух чисел и записать в третье. 2. Написать...

Используя нетипизированные указатели и указатели на подпрограммы обобщить сортировку пузырьком
Смысл задания в том, что нужно отсортировать массив структур из 3х полей по сумме координат есть...

6
Jupiter
07.06.2012, 16:21
  #2

Не по теме:

Цитата Сообщение от Кудаив Посмотреть сообщение
задача на чистом Си
Кудаив, для справки: в чистом Си нет оператов new-delete

0
419 / 418 / 72
Регистрация: 27.05.2012
Сообщений: 1,168
07.06.2012, 16:27  [ТС] 3
да спасибо я знаю, потом переделаю на malloc/end
0
1186 / 542 / 78
Регистрация: 01.07.2009
Сообщений: 3,517
07.06.2012, 17:00 4
Цитата Сообщение от Кудаив Посмотреть сообщение
потом переделаю на malloc/end
free освобождает память, а не паскалевский end.
Да и почему бы сразу не писать на чистом си.
0
419 / 418 / 72
Регистрация: 27.05.2012
Сообщений: 1,168
07.06.2012, 17:28  [ТС] 5
Торжественно клянусь что не буду смешивать стили!!! только подскажите по теме))
0
Каратель
Эксперт С++
6609 / 4028 / 401
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
07.06.2012, 18:21 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
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
#include <stdio.h>
#include <assert.h>
#include <stddef.h>
#include <stdlib.h>
#include <string.h>
 
#define DELIM " \t\n,./\\-+!@#$%^&?*()[]{}=|\'\""
 
size_t split_cstring(const char* str, const char* delims, char*** words);
 
int main(void)
{
    char str[] = "In the town where I was born"
                 "Lived a man who sailed to sea"
                 "And he told us of his life"
                 "In the land of submarines";
    char** word = NULL;
    size_t words = split_cstring(str, DELIM, &word), i = 0;
 
    for (i = 0; i < words; ++i)
    {
        printf("Word #%2d: %s\n", i + 1, word[i]);
        free(word[i]);
    }
 
    free(word);
 
    return 0;
}
 
size_t split_cstring(const char* str, const char* delims, char*** words)
{
    char *s = strdup(str), *ptr = NULL;
    size_t size = 10, count = 0;
 
    assert(str != NULL && "split_cstring: str == NULL");
    assert(delims != NULL && "split_cstring: delims == NULL");
    assert(words != NULL && "split_cstring: words == NULL");
 
    *words = (char**)malloc(size * sizeof(char*));
    assert(*words != NULL && "malloc error");
 
    for (ptr = strtok(s, delims); ptr != NULL; ptr = strtok(NULL, delims))
    {
        if (count == size)
        {
            size += (size_t)(1.6 * size);
            *words = (char**)realloc(*words, size * sizeof(char*));
            assert(*words != NULL && "realloc error");
        }
        (*words)[count++] = strdup(ptr);
    }
 
    *words = (char**)realloc(*words, count * sizeof(char*));
    free(s);
    return count;
}
0
419 / 418 / 72
Регистрация: 27.05.2012
Сообщений: 1,168
07.06.2012, 20:25  [ТС] 7
В вашем примере при переходе на новую строку слова слипляются...но всё же огромное спасибо!
0
07.06.2012, 20:25
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
07.06.2012, 20:25
Помогаю со студенческими работами здесь

Есть три переменные. Используя указатели на указатели, поменять значение максимальной и минимальной переменной
Мой код. #include &lt;iostream&gt; #include &lt;stdlib.h&gt; #include&lt;iomanip&gt; using namespace std; ...

Указатели на указатели с числами. Почему можно присвоить число в 4-ый элемент, если массив из 2 элементов?
Есть массив int **mas; mas=new int*; // выделил место под пять строк, верно ? mas=new int;//...

Указатели на указатели, как правильно разыменовать, где ошибка?
1)Есть класс: Shape - абстрактный; у него есть классы наследники: Circle, Triangle. 2)Eсть...

Зачем нужны все эти указатели (или не указатели)
Зачем надо DWORD, HANDLE, LPVOID?


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

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru