Все слова, которые начинаются с большой буквы, вывести большими буквами - C (СИ)
Формулировка задачи:
Здравствуйте! Помогите пожалуйста! Нужно в текстовом файле все слова, которые начинаются с большой буквы, вывести большими буквами.
Вот, что есть
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <ctype.h>
#include<time.h>
#include "Prog.c"
void Time_Stamp(FILE *f)
{time_t tmp;
tmp=time(NULL);
fprintf(f,"***%s***\n",ctime(&tmp));
}
int Letter(char Ch)
{int Count;
char Alphabet[]="abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ";
for (Count=0;Count<strlen(Alphabet);Count++)
{if (Ch==Alphabet[Count])
return(1);}
return(0);
}
main(int argc, char *argv[])
{int n,Count,Ch,Word_is;
char slovo;
char buffer[30];
FILE *fin, *fout, *flog;
if (argc<2)
{ puts("Недостаточно аргументов");
printf("Используйте например %s text.txt \n", argv[0]);
puts("Press Enter."); getchar(); exit(0);
}
sprintf(buffer,"%s.log",argv[0]);
if ((flog=fopen(buffer,"a"))==NULL)
{ puts("Протокол не открылся. Работа невозможна\n");
puts("Press Enter."); getchar(); exit(0);
}
Time_Stamp(flog);
fputs("Протокол успешно открыт \n",flog);
fputs("Программа приступает к работе \n",flog);
puts("Протокол успешно открыт \n");
puts("Программа приступает к работе \n");
if ((fin=fopen(argv[1],"r"))==NULL)
{
printf("Ошибка открытия файла %s \n",argv[1]);
Time_Stamp(flog);
fprintf(flog,"Ошибка открытия файла %s \n",argv[1]);
puts("Press Enter."); getchar();exit(0);
}
if ((fout=fopen("text","w"))==NULL)
{
printf("Ошибка открытия файла text.txt");
Time_Stamp(flog);
fprintf(flog,"Ошибка открытия файла text.txt");
puts("Press Enter."); getchar(); exit(0);
}
Time_Stamp(flog);
fprintf(flog,"Все файлы открыты успешно \n");
printf("Все файлы открыты успешно \n");
//program
while(1)
{Ch=fgetc(fin);
if(Ch==EOF) break;
if(!Letter(Ch)&&!Word_is)
{fputc(Ch,fout);
continue;}
if(Letter(Ch)&&!Word_is)
{buffer[Count]=Ch;
Count++;
Word_is=1;
continue; //slovo est'
}
if (Letter(Ch)&&Word_is)
{buffer[Count]=Ch;
Count++;
continue;
}
if(!Letter(Ch)&&Word_is) //konec slova
{buffer[Count]='\0';
Count=0;
Word_is=0;
if (isupper(buffer[Count])) //
while(1){ //думаю ошибка где-то здесь
buffer[Count]=toupper(buffer[Count]); //
fprintf(fout,"%s",buffer);} //
else fprintf(fout,"%s",buffer);
fputc(Ch,fout);
}
}
//printf(" %s",buffer);
Time_Stamp(flog);
fprintf(flog,"Результат");
fclose(fin);
fclose(fout);
Time_Stamp(flog);
fprintf(flog,"Работа завершилась успешно");
fclose(flog);
puts("Press Enter."); getchar(); exit(0);
fclose(fin);
}Решение задачи: «Все слова, которые начинаются с большой буквы, вывести большими буквами»
textual
Листинг программы
#include <stdio.h>
#include <ctype.h>
int main()
{
char word[80];
FILE* in_file;
char *c;
in_file=fopen("file.txt", "r");
while(fscanf(in_file, "%79s", word) != EOF)
{
if(islower(word[0])) continue;
c = word;
while(isalpha(*c)) putc(toupper(*c++), stdout);
putc('\n', stdout);
}
fclose(in_file);
}
Объяснение кода листинга программы
В этом коде:
- Объявлены две переменные:
wordтипаcharиin_fileтипаFILE*. - Вводится файл
file.txtдля чтения. - Переменная
cинициализируется значениемword. - В цикле, пока файл не закончится, происходит следующее:
- Проверяется, является ли первая буква слова строчной. Если да, то цикл продолжается.
- Переменная
cобновляется значениемword. - В цикле, пока текущий символ является буквой, выводится его в верхнем регистре.
- Выводится символ новой строки.
- Файл закрывается.