Нужно заменить ; на . в тексте в текстовом файле. Также нужно после точки, чтобы слово начиналось с большой буквы. Учитывать также нужно пробелы
Помогите исправить код. Не могу понять как учитывать пробелы и возвести в верхний регистр буквы после точки.
#define _CRT_SECURE_NO_WARNINGS
#include <iostream>
#include <fstream>
#include <string>
using namespace std;
int main()
{
FILE* f1, * f2;
char str[256];
char* estr;
f1 = fopen("text1.txt", "rt");
if (!f1)
{
cout << "Cannot open file!";
return 1;
}
f2 = fopen("text2.txt", "wt");
if (!f2)
{
cout << "Cannot open file!";
return 1;
}
else
{
cout << "File has opened!";
while (fgets(str, 256, f1) != NULL)
{
estr = fgets(str, 256, f1);
if (*estr == ';')
{
*estr = '.';
}
fputs(str, f2);
for (int i = 0; str[i] != 0; i++)
{
if (str[i] <= 'z' && str[i] >= 'a')
{
str[i] += 'A' - 'a';
}
}
fputs(str, f2);
}
}
fclose(f1);
fclose(f2);
return 0;
}
Ответы (1 шт):
Автор решения: Harry
→ Ссылка
Я бы исходил из конечного автомата, и делал бы примерно так (набросок на коленке, допускаю, что мог где-то ошибиться или решать неоптимально. stdin замените на входной файл, stdout на выходной).
int c, o, state = 0;
while((c = fgetc(stdin)) != EOF)
{
o = c;
if (state == 0)
{
if (c == ';') o = '.';
if (c == ';' || c == '.') state = 1;
}
else
{
if (c == ';') o = '.';
if (c == ';' || c == '.' || isspace(c)) state = 1;
else if (isalpha(c)) { o = toupper(c); state = 0; }
else state = 0;
}
fputc(o,stdout);
}
P.S. Из условия неясно, надо ли, например, менять h на H в ситуации, скажем,
. {"hello"}