Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 19.01.2010, 16:21   #1
mybabloo
Новичок
Джуниор
 
Регистрация: 19.01.2010
Сообщений: 1
По умолчанию ошибка.

Написал программу, не совсем сам, и поэтому довольно бредово.
Цель-считать текст из файла и одно слово менять на другое.
Код:
#include <iostream>
#include <string>
#include <stdio.h>

using namespace std;
char* getSubstring( char string[], int first, int last ){
	char* res;
	int i;
	if ( first > last || last > (int)strlen( string ) ){
		if ( first > last ){
            res = ""; printf(" first position must be <= last position ");
        } else {
            res = ""; printf(" last position must be < length(str) ");
		}
	} else {
		res = new char[last - first + 1];
		res[last - first + 1] = '\0';
        for ( i = 0; i < last - first + 1; i ++ ) {
            res[i] = string[first + i];
        }
    }
    return res;
}
bool equals( char str1[], char str2[] ){
	int i;
    if ( strlen(str1) != strlen(str2) ) {
		return false;
    } else {
		for ( i = 0; i < (int) strlen(str1); i ++ ) {
			if ( str1[i] != str2[i] ) {
				return false;
			}
        }
	}
    return true;
}


char* concatenate( char str1[], char str2[] ){
	char *res;
	int i,ls1,ls2;
    ls1 = strlen(str1);
    ls2 = strlen(str2);
	res = new char[ls1 + ls2 + 1];
	for ( i = 0; i < ls1; i ++ ){
		res[i] = str1[i];
	}
    for ( i = 0; i < ls2; i ++ ){
		res[ls1 + i] = str2[i];
	}
	res[ls1 + ls2] = '\0';
    return res;
}

char* replace( char str[], char oldsubstr[], char newsubstr[] ){
	int i, osl, sl, maxL = 1000;
    char* resultat;
    resultat = new char[maxL];
	resultat[0] = '\0';
    i = 0;
    sl = strlen(str);
    osl = strlen(oldsubstr);
    if ( osl == 0 ) { cout << "Old Substring must have length > 0"; return str; }
	while ( i <= sl - osl ){
		if ( equals( oldsubstr, getSubstring( str,i,i + osl - 1 ) ) ){
			resultat = concatenate(resultat,newsubstr);
			i = i + osl;
		} else { 
            resultat = concatenate(resultat, getSubstring(str,i,i));
            i ++;
		}
	}
    if ( i < sl ) {
		resultat = concatenate(resultat,getSubstring(str,i,sl-1)); 
	}
	resultat[strlen(resultat)] = '\0';
    return resultat;
}
void main ()
{
 fflush(stdin);
int length=0, maxL = 10000;
 char ch, *text=(char *)malloc(sizeof (char)), *word=NULL;
 FILE *f;
 if(!(f = fopen("1.txt", "rt"))) {cout<<"cant open this file";}


	while ((ch=getc (f))!=EOF)
	{
		text=(char*) realloc (text, (length+2)*sizeof (char));
		text [length++]=ch;

	}
	char *str, *oldsubstr, * newsubstr;
	str =ch
	oldsubstr = new char[maxL];
	newsubstr = new char[maxL];
 cout<<"Enter OldSubstring: ";
	cin >> oldsubstr;
    cout << "Enter NewSubstring: ";
	cin >> newsubstr;
    cout << "Result: " << replace(str,oldsubstr,newsubstr) << "\nPress any key to continue..." << endl;
    getchar();
}
в конце, собственно ошибка, надо чтобы str присвоилось значение ch.

Последний раз редактировалось MaTBeu; 19.01.2010 в 18:37.
mybabloo вне форума Ответить с цитированием
Старый 19.01.2010, 18:38   #2
MaTBeu
Eclipse Foundation
Старожил
 
Аватар для MaTBeu
 
Регистрация: 19.09.2007
Сообщений: 2,604
По умолчанию

Очень информативно. Название: ошибка. Проблема: ошибка в конце.
У вас ошибка не в конце, а в голове. Потому что вы не смотрите на то, что вам говорит компилятор и что вам говорят правила.

Проблема ваша в том, что вы хотите указателю присвоить значение. Потому что str - это строка, а ch - символ.
Исправляется таким способом.
Для начала надо выделить память под строку
Код:
str = new char[2];
str[0] = ch;
str[1] = 0;

Последний раз редактировалось MaTBeu; 19.01.2010 в 18:40.
MaTBeu вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Nero - ошибка драйвера DMA. ошибка CRC NecRoMat Софт 5 09.05.2012 01:29
Это ошибка Delphi или моя ошибка??? bloodeagle Общие вопросы Delphi 3 12.11.2009 15:26
Ошибка в статье = ошибка в рограмме. Alex Cones Общие вопросы Delphi 14 29.07.2009 18:17
Ошибка в Аfor i:=1 to SI do. Пишит что ошибка в SI Алексей_xXx Помощь студентам 2 29.05.2009 00:09
...Ошибка 101 (net::ERR_CONNECTION_RESET): Неизвестная ошибка... infrared Помощь студентам 0 16.04.2009 17:44