Динамическая строка - вопрос №894634

Все здравствуйте. Есть вот такое задание к нему программа. Среда разработки — VS 2005. Компиляция проходит без ошибок, однако после ввода строки возникает ошибка: The variable 'i' is being used without being defined в строке str[i]='\0'; в void String::set(). Помогите, пожалуйста, устранить ее. Заранее благодарю

Задание. Пользовательский класс String должен содержать необходимые элементы-данные, которые создаются в динамической области памяти.
Конструктор для созданиястрок: String (…);
Деструктор: ~String(); 
Метод ввода исходной строки: Set();
Метод печати: void print(…);
Код методов – вне пространства определения класса. Программа иллюстрирует прямой и косвенный способы обращения к методам.
Ввести с клавиатуры строку символов S1. Признак окончания ввода строки – нажатие клавиши «Ввод». Программа должна содержать перегруженную операцию «=», использование которой скопирует S1 в S2 .
Исходную и преобразованную строки вывести в файл. В программе необходимо использовать стоковые и файловые потоки.

Вариант задания: Если длина L=10, то удаляются все A..Z.



#include «stdafx.h» 
#include <iostream>
#include <string.h>
#include <stdlib.h>
#include <stdio.h>
#include <istream>
#include <fstream>
#include <conio.h>
using namespace std;

///////////////////////////////////////
const int MAX=255;

class String
{
private:
char *str;
char *strend;
public:
String();
void set();//metod vvoda ish. stroki
void print();//metod pechati
void run();//metod vipolneniya zadachi 
void printend();//metod pechati strend
String& operator= (String&);
~String();
};
//-------------------------------------
String::String()
{
str = new char [MAX];
str[0]='\0';
strend = new char [MAX];
strend[0]='\0';
//cout << «Constructor!»;
}
//-------------------------------------
String& String::operator= (String&ss)//s2=s1
{
strcpy(strend, ss.str);
return *this;
}
//-------------------------------------
String::~String()
{
delete []str;
delete []strend;
//cout << «Destructor!»;
}
//-------------------------------------
void String::run() 
{
unsigned int i=0, j=0;
char *ss;
ss = new char [MAX];
ss[0]='\0';

if(strlen(str)==10) 
{
for(i=0;i<10;i++)
{
if ( (str[i]<'A') || (str[i]>'Z') )
{
ss[j]=str[i];
j++;
}
}

ss[j]='\0';
str[0]='\0';

strcpy(str,ss);


cout << "\nStroka bez \«A\»...\«Z\»: ";
}
else 
{
cout << "\nStroka s \«A\»...\«Z\»: ";
}
}
//-------------------------------------
void String::set()
{
int i;
cout << «Vvedite stroku: »;
char *stroka = new char [MAX];
stroka[0]='\0';
cin.getline(stroka,MAX);
for(unsigned int i=0;i<strlen(stroka);i++)
{
str[i] = stroka[i];
}
str[i]='\0';
delete []stroka;
}
//-------------------------------------
void String:rint()
{
ofstream file(«file.txt», ios::app);
for (unsigned int i=0; i<strlen(str); i++) 
{
cout << str[i];
}


file << endl;
for (int i=0; i<strlen(str); i++) 
{
file << str[i];
}
}
//-------------------------------------
void String:rintend()
{
cout << "\nSkopirovannaya stroka: ";

for (unsigned int i=0; i<strlen(strend); i++) 
{
cout << strend[i];
}
}
//////////////////////////////////////////////
void main(void)
{
ofstream file(«file.txt», ios::out);

String s1,s2;

s1.set();
s1.print();
s1.run();
s1.print();

s2=s1;

s2.printend();

cout << "\n" << endl;

String *s3,*s4;
s3=new String; s4=new String;
s3->set();
s3->print();
s3->run();
s3->print();

*s4=*s3;

s4->printend();

cout << "\n" << endl;

getch();
}

02.01.14
1 ответ

Ответы

void String::set() в этой функции у вас объявления переменная i (и это не та что в цикле) ей не присвоено значение и вы ее используете как индекс массива вот у вас и ошибка.

 

04.01.14
Посмотреть всех экспертов из раздела Технологии > C/C++
Пользуйтесь нашим приложением Доступно на Google Play Загрузите в App Store