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

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

Войти
Регистрация
Восстановить пароль
 
sikeman
Сообщений: n/a
#1

Помогите найти ошибку - C++

29.11.2008, 15:27. Просмотров 643. Ответов 2
Метки нет (Все метки)

Короче написал прогу, в которой вводится строка, и в ней надо заменить первое слово. Всё работает нормально но при выводе конечной строки на экран к ней добавляются непонятные символы, и я не могу никак понять в чём косяк. Ниже привожу код программы и картинку с изображением результата.
#include "stdafx.h"
#include <string.h>
#include <stdlib.h>
#include <iostream.h>
#include <conio.h>
#include <iomanip.h>
#include <stdio.h>


class STRING
{
char *line;
int len;
public:
STRING();
STRING(char*);
STRING(const STRING &);
~STRING();
void print();
void input_string(char *);
void change();
};
STRING::STRING()
{
line=new char[256];
if(!line)
cout << "Memory error!" << endl;
for(int i=0;i<255;i++)
line[i]=0;
len=strlen(line);
cout<<"WORKING CONSTRUCTOR WITHOUT PARAMETERS"<<endl;
}
STRING::STRING(char *ln)
{
len = strlen(ln);
line=new char[len+1];
if(!line)
cout << "Memory error!" << endl;
strcpy(line,ln);
cout<<"WORKING CONSTRUCTOR WITH PARAMETERS"<<endl;
}
STRING::STRING(const STRING &obj)
{
len = obj.len;
line = new char [len + 1];
if(!line)
cout << "Memory error!" << endl;
strcmp(line, obj.line);
cout<<"Rabotaet konstruktor generator kopij"<<endl;

}
STRING::~STRING()
{
delete []line;
cout<<"WORKING DESTRUCTOR"<<endl;
}
void STRING::print()
{
cout<<line<<endl;
cout<<len<<endl;
}
void STRING::input_string(char * s)
{
delete []line;
len = strlen(s);
line = new char[len+1];
if(!line)
cout << "Memory error!" << endl;
strcpy(line, s);

}
void STRING::change()
{
int num = 0, tmp_len1, tmp_len2, k=0;
char ln1[80], *ln2, *ln3;
cout<<"Input word"<<endl;
cin>>ln1;
tmp_len1 = strlen(ln1);
while((line[k]!=' ') && (k<=len))
{
num=k;
k++;
}
ln2 = new char[len-num+1];
if(!ln2)
cout << "Memory error!" << endl;
for(int i=0;i<(len-num);i++)
ln2[i]=line[i+num+1];
tmp_len2 = strlen(ln2);
cout<<tmp_len2<<endl;
len = tmp_len1 + tmp_len2;
ln3 = new char[len+1];
if(!ln3)
cout << "Memory error!" << endl;
for(i=0; i<len; i++)
{
if(i<tmp_len1)
ln3[i] = ln1[i];
else
ln3[i] = ln2[i-tmp_len1];
}
delete []line;
line = new char[len+1];
if(!line)
cout << "Memory error!" << endl;
strcpy(line, ln3);
delete []ln2;
}
int main()
{
STRING ptr;
char tmp[256];
cout<<"enter"<<endl;
gets(tmp);
ptr.input_string(tmp);
ptr.print();
ptr.change();
ptr.print();
_getch();
return 0;
}
Помогите найти ошибку
Вложения
Тип файла: txt прога.txt (2.2 Кб, 21 просмотров)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
29.11.2008, 15:27
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Помогите найти ошибку (C++):

Помогите найти ошибку: По двум сторонам и углу найти все остальное - C++
Доброго времени суток. В универе дали задание написать программу &quot;По двум сторонам и углу между ними в треугольнике АВС найти два остальных...

Помогите найти ошибку - C++
#include&lt;iostream.h&gt; #include&lt;conio.h&gt; #include&lt;fstream.h&gt; void main() {clrscr(); struct podrozd {char naimenovanie; int...

Помогите найти ошибку - C++
Задание: Написать программу, которая считывает текст из файла и выводит в другой файл и на экран предложения, содержащие максимальное...

Помогите найти ошибку - C++
Сегодня начал изучать c++ и не могу найти ошибку вот задача ...

помогите найти ошибку - C++
доброе время суток Столкнулся с такой проблемой, надо сделать прогу которая: Вводим текст, и из этого текста удаляем слова которые...

помогите найти ошибку - C++
//--------------------------------------------------------------------------- #include &lt;vcl.h&gt; #pragma hdrstop #include...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
StarWorm
17 / 16 / 4
Регистрация: 20.11.2008
Сообщений: 81
29.11.2008, 18:25 #2
ппц... Ты при копировании, например (код не смотрел) забыл поставить НУЛЛ-символ конца строки!!!
1
sikeman
Сообщений: n/a
29.11.2008, 18:51 #3
StarWorm, спасибо, спасло добавление строки ln3[len+1]=NULL;
но спасла ещё изамена
Код
   for(i=0; i<len; i++)
    {
        if(i<tmp_len1)
            ln3[i] = ln1[i];
        else
            ln3[i] = ln2[i-tmp_len1];
    }
на
Код
    for(i=0; i<len; i++)
    {
        if(i<tmp_len1)
            strcpy(&ln3[i], &ln1[i]);
        else
            strcpy(&ln3[i], &ln2[i-tmp_len1]);
    }
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
29.11.2008, 18:51
Привет! Вот еще темы с ответами:

Помогите найти ошибку - C++
Пожалуйста, помогите найти ошибку. Компилятор выдает 2 ошибки. Думаю, что намудрила с переменной a. #include &lt;iostream.h&gt; ...

Помогите найти ошибку - C++
#include &lt;iostream&gt; using namespace std; int main() { double a, b; bool state; cout &lt;&lt; &quot; Enter a = &quot;; cin &gt;&gt;...

Помогите найти ошибку - C++
Задача - вывести &quot;Yes&quot; если массив возрастающий, в противном случае вывести &quot;No&quot; В массиве n элементов, n вводится с клавиатуры int...

Помогите найти ошибку. - C++
Дана целочисленная прямоугольная матрица. Определить: 1. Максимум среди сумм элементов диагоналей, параллельных главной диагонали...


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

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

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