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

обработка строки с удалением и добавлением элементов - C++

Восстановить пароль Регистрация
 
RoverWWWorm
0 / 0 / 0
Регистрация: 17.10.2010
Сообщений: 35
01.11.2011, 16:17     обработка строки с удалением и добавлением элементов #1
Приветствую!
Не могу решить задачу на С с использованием динамических массивов:
Дано целое число N(>0) и строка S. Преобразовать строку S в строку длины N следующим образом: если длина строки S больше N, то отбросить первые символы, если длина строки S меньше N, то в ее начало добавить символы "."(точка).

Или в этой задаче можно обойтись без динам-х массивов, тогда хотелось бы да примера с динамиче-ми массивами и без них.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
01.11.2011, 16:17     обработка строки с удалением и добавлением элементов
Посмотрите здесь:

Помогите с удалением строки матрицы C++
C++ Массив сортировка по возростанию с удалением ненужных элементов.
C++ Замена первых элементов каждой строки квадратной матрицы на сумму элементов этой строки
C++ Очередь С++ Проблема с удалением элементов класса очереди
C++ написать программу которая реализует возможность управления запиписом, вывод, и удалением элементов в противнях
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
OstapBender
 Аватар для OstapBender
581 / 519 / 35
Регистрация: 22.03.2011
Сообщений: 1,585
01.11.2011, 17:13     обработка строки с удалением и добавлением элементов #2
так можно
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
    char s[100] = "qwerty123";
    int n=10;
 
    int sz = strlen(s);
 
    if (n > sz) {
 
        memmove(s+n-sz,s,sz+1);
 
        for (int i=0; i<n-sz; i++)
            s[i]='.';
        
    } else if (sz > n) {
 
        memmove(s,s+sz-n,n+1);
 
    }
 
    puts(s);
RoverWWWorm
0 / 0 / 0
Регистрация: 17.10.2010
Сообщений: 35
01.11.2011, 17:49  [ТС]     обработка строки с удалением и добавлением элементов #3
Цитата Сообщение от OstapBender Посмотреть сообщение
так можно
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
    char s[100] = "qwerty123";
    int n=10;
 
    int sz = strlen(s);
 
    if (n > sz) {
 
        memmove(s+n-sz,s,sz+1);
 
        for (int i=0; i<n-sz; i++)
            s[i]='.';
        
    } else if (sz > n) {
 
        memmove(s,s+sz-n,n+1);
 
    }
 
    puts(s);
а как быть, если объявить массив вот так char s[] = "qwerty123";
тогда думаю пример выше не подойдет
OstapBender
 Аватар для OstapBender
581 / 519 / 35
Регистрация: 22.03.2011
Сообщений: 1,585
01.11.2011, 17:51     обработка строки с удалением и добавлением элементов #4
тогда выскажите свои мысли по поводу того, как надо делать
RoverWWWorm
0 / 0 / 0
Регистрация: 17.10.2010
Сообщений: 35
01.11.2011, 18:21  [ТС]     обработка строки с удалением и добавлением элементов #5
я думал необходимо использовать malloc или calloc, сам пробовал так и не получив нормального результата

я только с одним условием разобрался где надо s урезать:
C
1
2
3
4
5
6
7
8
9
char s[] = "qwerty";
int i,n;
 
n=3;
len=strlen(s);
if (len>n)
  for (i=0; i<n; i++)
     *(s+i)=*(s+len-1-n+i);
*(s+i)='\0';
OstapBender
 Аватар для OstapBender
581 / 519 / 35
Регистрация: 22.03.2011
Сообщений: 1,585
01.11.2011, 22:52     обработка строки с удалением и добавлением элементов #6
ну вы спросили можно ли обойтись без динамических, я написал без них.
в моём тексте memove, если вам они не подходят, на for заменить и вполне себе подойдет.

зачем вам нужно именно динамические строки?
RoverWWWorm
0 / 0 / 0
Регистрация: 17.10.2010
Сообщений: 35
02.11.2011, 10:50  [ТС]     обработка строки с удалением и добавлением элементов #7
Цитата Сообщение от OstapBender Посмотреть сообщение
зачем вам нужно именно динамические строки?
Хотелось бы разобраться с динамическими массивами, повысить свой уровень так сказать, а то "метод тыка" мне так и не помог, думал тут на форуме помогут.

Добавлено через 1 минуту
вот, что то получилось с динам-м массивом
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
#include <stdio.h>
#include <string.h>
 
int main(void)
{
 
    char *s="qwerty";
    int i,j,len,n;
    char *buf;
 
    printf("N->");
    scanf("%d",&n);
 
    len=strlen(s);
    buf=s;
    s=(char*)calloc(n,sizeof(char));
 
    if (len>n)
    {       
        for (i=0; i<n; i++)
            *(s+i)=*(buf+len-1-n+i);
    }
 
    else if (len<n)
    {       
        for (i=0; i<n-strlen(buf); i++)
            *(s+i)='*';
        for (j=0; i<n; i++,j++)
            *(s+i)=*(buf+j);
    }
 
    *(s+i)='\0';
    printf("%s\n",s);
 
    return 0;
}
OstapBender
 Аватар для OstapBender
581 / 519 / 35
Регистрация: 22.03.2011
Сообщений: 1,585
02.11.2011, 15:30     обработка строки с удалением и добавлением элементов #8
ну с выделением памяти более менее норм, и очищать не забудь.
а вот часть после if (len>n) работает неверно
RoverWWWorm
0 / 0 / 0
Регистрация: 17.10.2010
Сообщений: 35
02.11.2011, 18:01  [ТС]     обработка строки с удалением и добавлением элементов #9
Цитата Сообщение от OstapBender Посмотреть сообщение
ну с выделением памяти более менее норм, и очищать не забудь.
а вот часть после if (len>n) работает неверно
Очистить, да, забыл, исправлю.

А насчет if (len>n), почему не работает, можно по точнее, что именно? Запускал, проверял, работает, а именно если n=1, то выводится последний символ строки, то есть отбросываются первые символы строки, в итоге получается strlen(s)==n.
OstapBender
 Аватар для OstapBender
581 / 519 / 35
Регистрация: 22.03.2011
Сообщений: 1,585
02.11.2011, 22:39     обработка строки с удалением и добавлением элементов #10
ну строка qwerty.
я ввёл 3, он пишет ert, а что должен?

и так чисто на заметку:

такая запись
C
1
char * s = "qwerty";
неверна. т.к допускает возможность перезаписи памяти ROM.
нужно делать так:
C
1
2
s = malloc ...
strcpy(s,"qwerty");
ну а потом делайте realloc. заодно научитесь его по делу применять.
RoverWWWorm
0 / 0 / 0
Регистрация: 17.10.2010
Сообщений: 35
03.11.2011, 19:53  [ТС]     обработка строки с удалением и добавлением элементов #11
Цитата Сообщение от OstapBender Посмотреть сообщение
ну строка qwerty.
я ввёл 3, он пишет ert, а что должен?
точно, это моя не внимательность, должно быть так
*(buf+len-n+i);.

И еще надо добавить условие плюс к двум условиям выше
else
strcpy(s,buf);
это на случай если длина строки равна длине n/

про realloc нет в учебнике Кернигана и Ритчи, ну да ладно в инете найдем.
ну в общем спасибо за советы, такое ощущение что в форуме нет ни кого кроме OstapBenderа =)
OstapBender
 Аватар для OstapBender
581 / 519 / 35
Регистрация: 22.03.2011
Сообщений: 1,585
03.11.2011, 20:18     обработка строки с удалением и добавлением элементов #12
Цитата Сообщение от RoverWWWorm Посмотреть сообщение
про realloc нет в учебнике Кернигана и Ритчи
ну это наврятли)) ищите лучше.


Цитата Сообщение от RoverWWWorm Посмотреть сообщение
ну в общем спасибо за советы, такое ощущение что в форуме нет ни кого кроме OstapBenderа =)
да нет, тут просто когда простой вопрос, 1 человек обычно отвечает и остальным уже особо нечего добавить, а вопросы автора обычно направляются к ответившему человеку...
а отвечать за кого-то другого неприлично.

вот так и выходит, что я вас "курирую"

Добавлено через 5 минут
а с реаллоком всё просто - это перераспределение памяти. если строки динамические, то это - то что нужно. допустим сначала строка длины len (занимает len+1 байт) , а нам её надо сделать длины n, -надо перевыделить память. для этого и есть реаллок.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
04.11.2011, 07:40     обработка строки с удалением и добавлением элементов
Еще ссылки по теме:

8. Найти среднее арифметическое элементов каждой строки матрицы Q(l,m) и вычесть его из элементов этой строки C++
C++ Поэлементное соединение двух массивов строк с удалением повторяющихся элементов
C++ Реализовать динамический список с добавлением, изменением и удалением элементов по индексу

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

Или воспользуйтесь поиском по форуму:
RoverWWWorm
0 / 0 / 0
Регистрация: 17.10.2010
Сообщений: 35
04.11.2011, 07:40  [ТС]     обработка строки с удалением и добавлением элементов #13
Цитата Сообщение от OstapBender Посмотреть сообщение
ну это наврятли)) ищите лучше.
ну да, соврал , реаллок есть в описаннии библиотеки stdlib.h
Yandex
Объявления
04.11.2011, 07:40     обработка строки с удалением и добавлением элементов
Ответ Создать тему
Опции темы

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