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

Редактирование строки. В строку дозаписывается мусор - C++

Восстановить пароль Регистрация
 
AngerAnger
0 / 0 / 0
Регистрация: 17.03.2014
Сообщений: 12
17.03.2014, 18:29     Редактирование строки. В строку дозаписывается мусор #1
Есть программа, которая заменяет в строке "ph" на "f", а "ed" на "ing". Программа работает. Но если выводить, вконце вписывает некое количество мусорных символов. Притом я специально использовал realloc для урезания строки по кол-ву символов в ней. Вот код:
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
#include<conio.h>
#include<string.h>
#include<stdlib.h>
#include<iostream>
int main(){
int count=0;
char *str=(char*)malloc(100*sizeof(char)), *p;
char ph[]="ph", ed[]="ed";
printf("Enter your string:");
gets(str);
count+=strlen(str);
p=strstr(str,ph);
while(p)
{
    count--;
    p[1]='f';
    for(char i=0;i<strlen(p);i++)
        p[i]=p[i+1];
    p=strstr(str,ph);
}
p=strstr(str,ed);
while(p)
{
    count++;
    p[0]='i';
    p[1]='n';
    for(int i=strlen(p)-1;i>0;i--)
        p[i+1]=p[i];
    p[2]='g';
    p=strstr(str,ed);
}
str=(char*)realloc(str,count);
for(int i=0;i<count;i++)
    printf("%c",str[i]);
_getch();
return 0;
}
Вопрос: как убрать мусор?
p.s я ввёл счётчик, в который записал размер исходной строки и изменял его в зависимости от кол-ва замен, которые произведёт программа. и соответственно в конце выводил количество символов, равное значению счётчика. но всё же хотелось бы убрать мусор из строки, чтоб выводить через puts и т.д.
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
17.03.2014, 18:29     Редактирование строки. В строку дозаписывается мусор
Посмотрите здесь:

C++ Функция копирует строку в другую строку заданой длины и помещает текст первой строки по центру второй строки
C++ работа со строками, мусор в конце строки
Аналог рекурсивной функции, отображающей строку в обратном порядке, выводит "мусор" C++
C++ Почему выводит в конце строки мусор?
C++ Как сделать так, чтобы код вернул НОРМАЛЬНУЮ строку в pName, а не мусор
Мусор в конце строки C++
C++ Мусор при выводе не смотря на \0 символ в конце строки
C++ Работа с char. Как закончить строку, чтобы мусор не попадал?

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
vlad3996
6 / 6 / 3
Регистрация: 27.10.2013
Сообщений: 14
17.03.2014, 20:03     Редактирование строки. В строку дозаписывается мусор #2
Сообщение было отмечено автором темы, экспертом или модератором как ответ
AngerAnger, ты немного неправильно смещаешь символы: strlen(p)-1 в 27й строке - это последний ненулевой символ, а надо сдвигать вместе с нулевым... Прога не правильно работает из-за того, что \0 удалён.
C++
1
2
for(int i=strlen(p);i>0;i--)
        p[i+1]=p[i];
AngerAnger
0 / 0 / 0
Регистрация: 17.03.2014
Сообщений: 12
19.03.2014, 00:09  [ТС]     Редактирование строки. В строку дозаписывается мусор #3
Спасибо огромное!)
Иногда даже не догадываешься насколько бывают простые ошибки.)
Yandex
Объявления
19.03.2014, 00:09     Редактирование строки. В строку дозаписывается мусор
Ответ Создать тему
Опции темы

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