Задача такая: нужно написать программу, которая выведет в файл слова в обратном порядке, при этом она поменяет регистр первых букв в словах и оставит на месте последний знак.
Вот сам код. Не могу найти ошибку.
using namespace std;
int main()
{
//setlocale(LC_ALL, "Russian");
FILE* f1 = fopen("input.txt", "rt");
FILE* f2 = fopen("output.txt", "w+");
//если файл не существует. выводим ошибку
if (f1 == NULL)
{
printf("Error \n");
}
else
{
int i, j, p, sym;
int len = 1000;
int dlin = 0;
char* phrase = new char [len];
// пока не найден конец, считываем файл в массив
while (sym = getc(f1) != EOF)
{
phrase[dlin] = char(sym);
dlin++;
}
int n = 0, k = 0;
char toch;
for (i = dlin; i >= 0; i--)
{
//не захватывая последний знак, обрабатываем данные
//if (phrase[dlin] = '.'){toch = phrase[dlin];phrase[dlin] = ' '; }
// Найден пробел или конец строки
if (phrase[i] == ' ' || phrase[i] == '\n' || phrase[i] == '\0')
{
for (k = i - 1; k >= 0; k--)
{
//найдем начало слова
if (phrase[k] == ' ' || k == 0)
{
n = k;
if (k != 0) n++;
break;
}
}
// запишем слово в файл и поменяем размер буковки
for (j = n; j < i; j++)
{
if ((phrase[n] >= 'а') && (phrase[n] <= 'я'))
{
phrase[n] += 'А' - 'а';
}
else
{
phrase[n] -= 'А' - 'а';
}
if ((phrase[n] >= 'a') && (phrase[n] <= 'z'))
{
phrase[n] += 'A' - 'a';
}
else
{
phrase[n] -= 'A' - 'a';
}
// вывод в файл
fprintf(f2, "%c", phrase[j]);
}
}
}
fprintf(f2, "%c", toch);
}
fclose(f1);
fclose(f2);
return 0;
}
Кофе для программистов: как напиток влияет на продуктивность кодеров?
Рекламные вывески: как привлечь внимание и увеличить продажи
Стратегії та тренди в SMM - Технології, що формують майбутнє сьогодні
Выделенный сервер, что это, для чего нужен и какие характеристики важны?
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
Пытаюсь найти особые точки кадра с помощью функции goodFeaturesToTrack в OpenCV 30: