Заменить в файле все первые буквы в словах на заглавные буквы

Рейтинг: 0Ответов: 1Опубликовано: 15.10.2014
//---------------------------------------------------------------------------

#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;
}
}
//---------------------------------------------------------------------------

В первом файле у меня, допустим, есть строка "иван иванов", нужно, чтобы эта строка записалась во второй файл и при этом выглядела бы так: "Иван Иванов". Но проблема в том, что строка записывается во второй файл без изменений, то есть как было "иван иванов", так и осталось.
То есть нужно, чтобы заменились в файле все первые буквы в словах на заглавные буквы. Как это реализовать?

Ответы

▲ 1Принят

Надо:

  1. Пройти по всем символам строки от начала до конца.

  2. Определить, является ли текущий символ первым в слове - он либо первый в строке, либо стоит после пробела, перевода строки и т.п.).

  3. Если да, то перевести в верхний регистр (как в той строчке).

Поэтому нам нужен каждый i-й символ, который удовлетворяет условию п.2, его мы попробуем перевести в верхний регистр. Для упрощения предположим, что слова в строке разделяются только пробелами, знаков препинания и др. символов, кроме букв, нет. Тогда это условие может иметь вид:

if (i == 0 || help[i-1] == ' ')
    help[i] = toupper(help[i]);

т.е. если i=0, то help[i] первый символ строки, если help[i-1] == ' ', то текущему символу help[i] предшествует пробел. Только в этих случаях мы пытаемся его преобразовать. Остается немного подпилить: поместить этот фрагмент в цикл со счетчиком i, чтобы пройти по всем символам от первого (i=0) до конца строки.