Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Общие вопросы > удаление ненужных символов


Автор: ZC1989 13.12.2006, 16:01
Здрасть...

тема такая, есть буфер в котором хранится содержимое некоего файла, я его посимвольно перебираю и удаляю ненужные мне данные, так как пробел и табуляция, но вот с пробелом проблема почему-то '\n' игнорируется...


Код

char *CharComplicateLine(char *Original)
{
    char    *Result = new char[MAX_PATH];
    for(int Count = 0; Count < strlen(Original); ++Count)
    {
        if(Original[Count] == '\n') Result[Count] = ' ';
        else if(Original[Count] == '\t') Result[Count] = ' ';
        else Result[Count] = Original[Count];
    }
    Result[Count] = '\0';

    return Result;
}

Автор: HappyLife 13.12.2006, 16:07
Я не понял что тебе нужно удалить...
Если пробелы, то как они могут исчезнуть, если ты \n - заменяешь пробелом и \t заменяешь пробелом..
\n - это перевод на другую строку.... А точнее в сочетании \r\n

Автор: Sartorius 13.12.2006, 16:07
Как читаешь из файла? и если можно весь код покажи...

Автор: Xenon 13.12.2006, 16:10
ZC1989, я не понял что ты делаешь ... Ты просто заменяешь пробелами ... Если тебе их нужно вырезать, то тут нужно новый массив создавать, в который ты добавишь все, кроме пробелов (то есть самих пробелов и того, что ты ими заменил)

Автор: ZC1989 13.12.2006, 16:11
мне нужно по сути из многострокового файла сдалть одну большую строку... а читаю я этот файл из архива в буфер

Автор: Sartorius 13.12.2006, 16:18
ZC1989, я спросил про функцию , которой ты это делаешь... покажи код.. \n не всегда остается после чтения. Он у тя в буффере есть? Посмотри под отладчиом

Автор: HappyLife 13.12.2006, 16:42
Тогда удаляй Cочетание \r\n

Автор: np9mi7 13.12.2006, 16:58
Поскольку в исходном коде есть new, делаю вывод что это С++, вот в этом чудном языке есть такой алгоритм, называется он std::remove;

Автор: Rockie 13.12.2006, 17:05
Цитата(ZC1989 @  13.12.2006,  16:01 Найти цитируемый пост)
перебираю и удаляю ненужные мне данные, так как пробел и табуляция, но вот с пробелом проблема почему-то '\n' игнорируется...

ZC1989, а если кидать данные с помощью >> в какой-нибудь промежуточный буфер и из него уже в другой файл, или куда там нужно далье..? В поток будет сбрасываться все как раз без символов-разделителей.

иллюстрация:
Код
#include<iostream>
#include<fstream>

int main(){

 std::string buff;                // буфер

 std::fstream in("file.txt");
 // ..

 // на экран получаем последовательность без разделителей:
 while(in>>buff) std::cout<<buff;

 std::system("pause");
 return 0;
}


А если как в твоем примере, то надо проверять просто на '\0' 

Автор: codelord 13.12.2006, 17:20
попробуй заменить строку 

if(Original[Count] == '\n') Result[Count] = ' ';

на

if(Original[Count]==0x0D && Original[Count+1]==0x0A ) Result[Count] = ' ';

Автор: ZC1989 13.12.2006, 17:22
Rockie, я ващет написал что данные из архива получаю... потом в стд передать нельзя...

а впринципе я со всем уже разобрался сам... пасиб за внимаение

Добавлено @ 17:25 
codelord, может у тебя компилятор на Visual C++, а у меня на  Result[Count] = ' '; (без содержимого) ругается

Автор: codelord 13.12.2006, 18:09
Result[Count] = 0x20;

Автор: ZC1989 13.12.2006, 20:09
codelord, замяли тему уже.... smile написал же, что разобрался и сделал всё как мне надо

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)