Форум программистов, компьютерный форум, киберфорум
Наши страницы

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

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 19, средняя оценка - 4.89
cs_from_hell
0 / 0 / 0
Регистрация: 25.05.2010
Сообщений: 19
#1

Реализация функции Substring с помошью указателей - C++

21.07.2010, 11:26. Просмотров 2453. Ответов 2
Метки нет (Все метки)

Доброго времени суток!
Решил реализовать функцию Substring в C++, с делал это так:

C++
1
2
3
4
5
6
7
8
9
10
11
char* SubString(char* str, int index, int length)
{
     char resChar[255] = "";
     for(int j = index; j < (index + length); j ++)
     {
          char c [2];
          wsprintf(c, "%c", str[j]);
          strcat(resChar, c);
     }
     return resChar;
}
Теперь собственно вопрос. Как это реализовать с помощью указателей?
Есть такой пример:
C++
1
2
3
4
5
6
7
8
9
char s[256], *p = s, *p2 = s;
gets(s);
while(*p) // Пока в строке есть символы
{ if( !ispunct(*p) && !isspace(*p) )
*(p2++) = *p; // Если не знак препинания, копируем
p++; // Переходим к следующему символу
}
*p2 = '\0';
puts(s);
Делаю подобным образом:
C++
1
2
3
4
5
6
7
8
9
10
11
12
char* SubString2(char* str, int index, int length)
{
     char* p = str;
     
     while(*p)
     {
             *(p++) = *str; //ругается в этом месте
             p++;
     }
     *p= '\0';
     return str;
}
p.s. компилятор DevC++
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
21.07.2010, 11:26
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Реализация функции Substring с помошью указателей (C++):

Реализация задачи с помошью процедуры - C++
Добрый день друзья! Есть задачка : Дважды вычислить значение выражения, первый раз используя проце-дуру, а второй – функцию. С помощью...

даны 2 последовательности в файлах, в двух разных, нужно их обьединить и отсортировать по возрастанию. Но нужно сделать прогу с помошью указателей - C++
вот текст проги которую я сделал, но без указателей. переделайте пожалуйста #include&lt;fstream.h&gt; #include&lt;iostream.h&gt; void main(){ ...

Почему в сортировке указателей на объекты в вызове функции используются адреса объектов, а не указателей? - C++
Доброго времени суток! Рассматриваю пример (из Лафоре) сортировки массива указателей на объекты, для чего используются указатели на...

Создать специфицированный шаблон функции, принимающей массив указателей на char и количество самих указателей - C++
Задача: создать специфицированный шаблон функции, принимающей массив указателей на char и количество самих указателей. Вернуть адрес...

составить программу с помошью функции - C++
составить программу которая вычесляет сумму 3 чисел с помошью функции

Реализация программы с использованием ссылок и указателей - C++
Добрые люди! Подскажите, есть ли тут использованные ссылки и указатели? Препод не принимает лабораторную работу, пока я не реализую...

2
.::.DIMA.::.
143 / 143 / 4
Регистрация: 26.10.2008
Сообщений: 782
21.07.2010, 12:11 #2
Думаю, лучше сделать так:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
char * subStr = new char [lenght + 1];
 
    char * p = str;
    char * p1 = subStr; 
 
    ...
 
    int i = 0;
    while (...)
    {
        *p1 = *p;
        p1++;
        p++;
        i++;
    }
    *p1 = '\0';
 
    return subStr;
Но это не всё. А что если index или lenght больше чем длина строки?
Попробуйте доделать сами.
1
cs_from_hell
0 / 0 / 0
Регистрация: 25.05.2010
Сообщений: 19
21.07.2010, 12:41  [ТС] #3
Спасибо! Все работает нормально!
Дополнил так:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
     char * subStr = new char [length + 1];
     char * p = str;
     char * p1 = subStr;
     
     int i = 0;
     while (i < length + index)
     {
          if(i >= index)
          {
               *p1 = *p;
               p1++;
          }
          p++;
          i++;
     }
     *p1 = '\0';
     return subStr;
теперь если задается длина больше чем оставшаяся будет выдаваться то что осталось, например из "0123456" если обрезать по 2 и 15 результат получим 23456. Если индекс будет больше длины строки получим пустую строку.
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
21.07.2010, 12:41
Привет! Вот еще темы с ответами:

С помошью одной функции посчитать результат для двух классов - C++
//С помощью функции friend obrab подсчитать сумму матрицы и массива. Ошибки выдаёт не опйму почему. #pragma once class matriza ...

Различные функции, для которых можно создать массив указателей на функции - C++
Придумайте не менее 3-х различных функций, для которых можно создать массив указателей на функции.

Передача указателей в функции - C++
Привет всем. Вообщем изучаю с\с++ по книге Павловской, дошел до динамических структур данных(списки, стеки, очереди...), Вообщем наткнулся...

Преобразование указателей на функции - C++
Добрый вечер, очень давно я не объявлялся. Буквально несколько месяцев даже не садился прогать за сипипи. :) Итак, к делу. Вопрос...


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

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Опции темы

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