Здравствуйте. Помогите, пожалуйста, решить задачу. Заранее спасибо.
1)Ввести строку в символьный массив tmp [80].
2)Выделить блок памяти через указатель.
3)Скопировать строку в выделенный блок.
4)Если длина строки чётное число то удалить 2 символа из середины. Если нечётное, то удалить центральный символ. (Обрабатывать строку при помощи указателей внутри выделенного блока памяти. )
5)Вывести результат обработки.
6)Освободить блок.
P.S. Запрещено использовать дополнительные массивы и блоки!
Проблемы начинаются на 4 этапе. Не как не могу понять как при помощи указателей удалить из строки символы.
Прочла все лекции по указателям не помогло. Пожалуйста, помогите написать этот код, очень нужно.
Другие языки программирования и технологии
С++.Обработка строк при помощи указателей.
#include <iostream>
using namespace std;
int main() {
char tmp[80];
cout << "string? ";
cin.getline(tmp, 80);
int l = 0;
for (char *p = tmp; *p; ++p, ++l);
cout << "length: " << l << endl;
char *s = new char[l + 1];
char *e = s + l + 1;
for (char *pt = tmp, *ps = s; ps < e; *ps++ = *pt++);
cout << "copy: " << s << endl;
int d = 2 - l % 2;
for (char *p = s + l / 2 + 1; p < e; ++p) *(p - d) = *p;
cout << "result: " << s << endl;
delete[] s;
return 0;
}
using namespace std;
int main() {
char tmp[80];
cout << "string? ";
cin.getline(tmp, 80);
int l = 0;
for (char *p = tmp; *p; ++p, ++l);
cout << "length: " << l << endl;
char *s = new char[l + 1];
char *e = s + l + 1;
for (char *pt = tmp, *ps = s; ps < e; *ps++ = *pt++);
cout << "copy: " << s << endl;
int d = 2 - l % 2;
for (char *p = s + l / 2 + 1; p < e; ++p) *(p - d) = *p;
cout << "result: " << s << endl;
delete[] s;
return 0;
}
Указатель практически индекс в массиве. Только соответствующий член массива получается не через квадратные скобки, а с помощью *
Удалить - значит сдвинуть все остальные члены массива налево, чтобы заполнить освободившееся место, у тебя на 2 или 1 символ.
Удалить - значит сдвинуть все остальные члены массива налево, чтобы заполнить освободившееся место, у тебя на 2 или 1 символ.
void delchars(char * str, unsigned int size)
{
for(unsigned int i = size/2+1;i < size;i++)
*(str+i-1-(int)(size%2 == 0)) = *(str+i);
*(str+size-1-(int)(size%2 == 0)) = '\0';
}
Удаляет из строки str символы из середины (2 для чётного, 1 для нечётного) . В теории xD
{
for(unsigned int i = size/2+1;i < size;i++)
*(str+i-1-(int)(size%2 == 0)) = *(str+i);
*(str+size-1-(int)(size%2 == 0)) = '\0';
}
Удаляет из строки str символы из середины (2 для чётного, 1 для нечётного) . В теории xD
Похожие вопросы
- С++ обработка строк при помощи указателей
- 2 массива. Найти масимальную подпоследовательность с помощью указателей
- Си работа со строками. Нужна помощь
- многомерные массивы (c++) Как нужно объявить четырехмерный массив с помощью указателей?
- Указатели на строки в C++
- Указатель на строку - массив, как это?
- Список с использованием указателей на Си
- Два вопроса про указатели в С++ внутри.
- Вопрос про указатели в С++ внутри
- нужна помощь с указателями!надо написать этот програмный код,используя указатели(