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


Автор: Garik1995 15.10.2014, 08:41
Составить программу на языке С++, позволяющую отредактировать заданный с консоли текстовый файл: заменить в нем на заглавные буквы все первые буквы в словах.Надо сделать так чтобы было (например "мама мыла раму", а станет "Мама Мыла Раму").Вот код.
Код

//---------------------------------------------------------------------------

#pragma hdrstop

//---------------------------------------------------------------------------
#include<stdio.h>
#include<conio.h>
#include<stdlib.h>
#include<iostream>
#include <locale>
#include<cctype>
#include<cstring>
#include<string>
#include<vcl.h>
#pragma argsused
int main(int argc, char* argv[])
{
char help[100];
int n;
setlocale(LC_ALL, "russian_russian");
FILE *f1, *f2;
printf("Input file name\n");
gets(help);
f1 = fopen(help, "rt");
if ((!f1)) {
printf("File not found!");
}
else
{
    f2 = fopen("File2.txt", "wt");
{
    while (fgets(help,99,f1))
{
    help[n] = toupper(help[n]);
    fprintf(f2, "%s", help);
}
}
getch();
return 0;
}
}
//---------------------------------------------------------------------------

Автор: xvr 15.10.2014, 13:10
Цитата(Garik1995 @  15.10.2014,  08:41 Найти цитируемый пост)
Код

int n;
...
help[n] = toupper(help[n]);


Это не все первые буквы в словах а какая то буква в каждой строке (если повезет)

Автор: Garik1995 15.10.2014, 13:20
Цитата(xvr @ 15.10.2014,  13:10)
Цитата(Garik1995 @  15.10.2014,  08:41 Найти цитируемый пост)
Код

int n;
...
help[n] = toupper(help[n]);


Это не все первые буквы в словах а какая то буква в каждой строке (если повезет)

Код

for(int n = 0; n<strlen(help); n++)
{
if((help[n-1]==' ') || ((n-1)<0))
help[n] = toupper(help[n]); 
}

Я уже разобрался,всё равно спасибо)написал проверку на символы после которой первые буквы слов преобразуются в верхний регистр)Там надо проверить на наличие нижнего регистра первый символ и символ после пробела.

Автор: math64 15.10.2014, 15:05
Цитата(Garik1995 @  15.10.2014,  13:20 Найти цитируемый пост)
Код

if((help[n-1]==' ') || ((n-1)<0))

сначала нужно проверить (n-1)<0, иначе help[n-1] приводит к выходу за пределы массива и программа может вылететь.

toupper() преобразовывает кириллицу?

Автор: Garik1995 16.10.2014, 02:45
Цитата(math64 @ 15.10.2014,  15:05)
Цитата(Garik1995 @  15.10.2014,  13:20 Найти цитируемый пост)
Код

if((help[n-1]==' ') || ((n-1)<0))

сначала нужно проверить (n-1)<0, иначе help[n-1] приводит к выходу за пределы массива и программа может вылететь.

toupper() преобразовывает кириллицу?

Да

Добавлено через 3 минуты и 15 секунд
Цитата(math64 @ 15.10.2014,  15:05)
Цитата(Garik1995 @  15.10.2014,  13:20 Найти цитируемый пост)
Код

if((help[n-1]==' ') || ((n-1)<0))

сначала нужно проверить (n-1)<0, иначе help[n-1] приводит к выходу за пределы массива и программа может вылететь.

toupper() преобразовывает кириллицу?

Ммм,у меня сначала проверяется условие [n-1] = '  '  , а потом (n-1)<0 и программа не вылетает, но попробую ваш вариант, спасибо!

Автор: math64 16.10.2014, 11:39
это простая программа, потому и не вылетает. массив help[] объявлен на стеке, поэтому help[-1] тоже на стеке и ипользуется только для чтения. Поэтому не вылетает. Если бы help выделялся на стеке или использовалось отображение файла на память, могла бы вылететь.

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