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

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

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

Восстановить пароль
Повторная активизация e-mail

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

Ответ
 
Опции темы Поиск в этой теме
Старый 29.03.2012, 10:13   #1
asmars
Форумчанин
 
Аватар для asmars
 
Регистрация: 28.05.2011
Сообщений: 309
По умолчанию Чтение/запись файла. fstream.

Всем привет!
Делаю лабораторную, и не могу понять как считать с файла по символам начиная с первого.
Задание такое:
"Создать файл, с текстом, что введет пользователь. Считать с файла текст, и перезаписать его с таким условием: большую букву на маленькую менять и наоборот"
как читать с файла знаю..
Код:
        
myfile.open("file.txt", ios::in);
myfile.getline(text,1000);
cout<<endl<<text;
myfile.close();
менять букву с помощью isupper, toupper, tolower.

а вот как считать каждый символ, проверять его isupper, а потом занести его в отдельный буфер char buf[1000]; - НЕ знаю.

Заранее благодарен!
Спеши медленно.
asmars вне форума Ответить с цитированием
Старый 29.03.2012, 11:41   #2
Гром
Старожил
 
Аватар для Гром
 
Регистрация: 21.03.2009
Сообщений: 2,193
По умолчанию

Примерно так
Код:
for (int i = 0; i < len; ++i)
 if (isupper(s1[i]))
  s2[i] = tolower(s1[i]);
 else
  s2[i] = toupper(s1[i]);
Простые и красивые программы - коды программ + учебник C++
Создание игры - взгляд изнутри - сайт проекта
Тема на форуме, посвященная ему же
Гром вне форума Ответить с цитированием
Старый 29.03.2012, 13:14   #3
asmars
Форумчанин
 
Аватар для asmars
 
Регистрация: 28.05.2011
Сообщений: 309
По умолчанию

Гром, спасибо, но этот участок кода я могу написать..
я не знаю как считать по очереди символы с файла..

типа того..
Код:
int i=o;
char ch[1000];
while(!file.eof()){
 ch=i-тий символ из файла;
 i++;
}
такое я не знаю как сделать!
Спеши медленно.
asmars вне форума Ответить с цитированием
Старый 29.03.2012, 13:47   #4
EUGY
Форумчанин
 
Аватар для EUGY
 
Регистрация: 11.07.2010
Сообщений: 914
По умолчанию

Код:
	setlocale(LC_ALL,"rus");
	fstream file;
	file.open("file.txt", ios::in);
	int i = 0;
	char ch[1000];
	while(!file.eof())
		ch[i++] = tolower(file.get());
?
EUGY вне форума Ответить с цитированием
Старый 29.03.2012, 14:38   #5
asmars
Форумчанин
 
Аватар для asmars
 
Регистрация: 28.05.2011
Сообщений: 309
По умолчанию

EUGY, спасибо, Ваш код натолкнул меня на правильный путь)

вот написал такой код, но он работает не так как надо..
помогите разобраться в чем дело..

Код:
int main()
{
        fstream myfile;

        char buf[1000];
        int i=0;
        char text[1000];

        cout<<"Vvedite text, dlya zapisi v file.."<<endl;
        cin.getline(text,1000);

        //---zanosim text v file--
        myfile.open("file.txt", ios::out);
        myfile<<text;
        myfile.close();
        //----end zanosim text v file--

        //----chtenie texta iz file--
        myfile.open("file.txt", ios::in);
        while(!myfile.eof()){
                text[i++]=myfile.get();
        }
        myfile.close();
        //----end chtenie texta iz file--

        for(i=0; i<sizeof(text); i++){
                if(islower(text[i])){
                        toupper(text[i]);
                }else{
                        tolower(text[i]);
                }
        }

        cout<<text;

        getch();
        return 0;
}
Спеши медленно.

Последний раз редактировалось asmars; 29.03.2012 в 14:38. Причина: не правильно оформил..
asmars вне форума Ответить с цитированием
Старый 29.03.2012, 14:46   #6
asmars
Форумчанин
 
Аватар для asmars
 
Регистрация: 28.05.2011
Сообщений: 309
По умолчанию

уже разобрался!
все же спасибо всем за участие!

Код:
int main()
{
        fstream myfile;

        char buf[1000];
        int i=0;
        char text[1000];

        cout<<"Vvedite text, dlya zapisi v file.."<<endl;
        cin.getline(text,1000);

        //---zanosim text v file--
        myfile.open("file.txt", ios::out);
        myfile<<text;
        myfile.close();
        //----end zanosim text v file--

        //----chtenie texta iz file--
        myfile.open("file.txt", ios::in);
        while(!myfile.eof()){
                text[i++]=myfile.get();
        }
        myfile.close();
        //----end chtenie texta iz file--

        for(i=0; i<sizeof(text); i++){
                if(islower(text[i])){
                        text[i]=toupper(text[i]);
                }else{
                        text[i]=tolower(text[i]);
                }
        }

        cout<<text;

        getch();
        return 0;
}
Спеши медленно.
asmars вне форума Ответить с цитированием
Старый 29.03.2012, 15:02   #7
asmars
Форумчанин
 
Аватар для asmars
 
Регистрация: 28.05.2011
Сообщений: 309
По умолчанию

опять проблема..
выводит какие-то лишние символы..

Код:
int main()
{
        fstream myfile;
        int i=0;
        char text[1000];

        cout<<"Vvedite text, dlya zapisi v file.."<<endl;
        cin.getline(text,1000);

        //---zanosim text v file--
        myfile.open("file.txt", ios::out);
        myfile<<text;
        myfile.close();
        //----end zanosim text v file--

        //----chtenie texta iz file i pereobrazovanie symvolov--
        myfile.open("file.txt", ios::in);
        while(!myfile.eof()){
                text[i]=myfile.get();
                if(islower(text[i])){
                        text[i]=toupper(text[i]);
                }else{
                        text[i]=tolower(text[i]);
                }
                i++;
        }
        myfile.close();
        //----end chtenie texta iz file i pereobrazovanie symvolov--

        cout<<text; //---- VIVODIT LISHNIY SYMVOLY!!!!!!!!!!!!!!!!!!!!!!!!!!!!

        getch();
        return 0;
}
Спеши медленно.
asmars вне форума Ответить с цитированием
Старый 29.03.2012, 17:45   #8
Гром
Старожил
 
Аватар для Гром
 
Регистрация: 21.03.2009
Сообщений: 2,193
По умолчанию

Добавьте в конец обработки
Код:
text[i] = 0;
Простые и красивые программы - коды программ + учебник C++
Создание игры - взгляд изнутри - сайт проекта
Тема на форуме, посвященная ему же
Гром вне форума Ответить с цитированием
Старый 29.03.2012, 19:59   #9
asmars
Форумчанин
 
Аватар для asmars
 
Регистрация: 28.05.2011
Сообщений: 309
По умолчанию

Гром, спасибо большое!
Помогли.

Только вот не могу разобраться почему так происходит..
Спеши медленно.
asmars вне форума Ответить с цитированием
Старый 29.03.2012, 20:23   #10
Гром
Старожил
 
Аватар для Гром
 
Регистрация: 21.03.2009
Сообщений: 2,193
По умолчанию

Ноль - это символ конца строки в C/C++. Когда программа, посимвольно читая строку, доходит до нуля, она считает, что на этом строка закончилась, и то, что дальше - к ней отношения не имеет. Если же ноль в строку не поставить, то программа будет читать байты памяти (и интерпретировать их как символы этой строки) до тех пор, пока не встретит наконец ноль. Только это уже может быть совсем в другой области памяти, далеко за пределами той ее части, что была выделена под строку.
Никаким иным способом, кроме ноля, нельзя указать программе, где кончается строка - только запоминая в отдельной переменной ее длину, и написать дополнительный код, осуществляющий сравнение с этой заданной длиной.
Простые и красивые программы - коды программ + учебник C++
Создание игры - взгляд изнутри - сайт проекта
Тема на форуме, посвященная ему же
Гром вне форума Ответить с цитированием
Ответ


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

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Чтение\Запись из файла vlados007 Общие вопросы C/C++ 1 10.03.2012 04:15
Чтение и запись fstream Armatus Общие вопросы C/C++ 15 07.10.2011 13:56
чтение и запись файла VaskaKostolom Паскаль, Turbo Pascal, PascalABC.NET 5 13.09.2011 20:59
Чтение из файла в запись THX35 Фриланс 8 19.03.2010 22:41
fstream, чтение и запись .txt willfogg Помощь студентам 0 26.04.2009 18:26