Заглавная буква в файле

Я пытаюсь использовать первую букву. Символы читаются из текстового файла. К сожалению, я не могу. Я прочитал идею, в которой говорится, что добавьте две логические переменные, которые могут иметь тип int: одна переменная будет содержать 1, когда текущий символ является частью слова, а другая переменная будет содержать 1, когда предыдущий символ является частью слова. Но как я могу узнать, является ли символ частью слова или нет?

#include <stdio.h>

void cpt(char x[]);

int main(){

    cptlz("in.txt");

    return 0;
}
void cptlz(char x[]){

    char ch;

    int currentch,
        previouschar,
        st=1;

    FILE *fptr_in;

    if((fptr_in=fopen(x,"r"))==NULL){
        printf("Error reading file\n");
    }
    else{
        while(st==1){
            st=fscanf(fptr_in,"%c",&ch);
        if (ch >= 'a' && ch <= 'z'){
            printf("%c",ch-32);
        }
            else
                printf("%c",ch);
            }
        }
}

2 ответа

Решение

Просто попробуйте этот код..

void cptlz(char x[]){

char ch;

int currentch,
    previouschar='\n',
    st=1;

FILE *fptr_in;

if((fptr_in=fopen(x,"r"))==NULL){
    printf("Error reading file\n");
}
else{

    while((ch=fgetc(fptr_in))!=EOF){

    if (ch >= 'a' && ch <= 'z' && (previouschar=='\n' || previouschar==' ')){
        printf("%c",ch-32);
    }
        else
            printf("%c",ch);

    previouschar=ch;
        }

    }
}

Символ является "частью слова" и должен начинаться с заглавной буквы, если:

  1. это строчные буквы a..z (для которого вы можете и, вероятно, должны использовать стандартную библиотечную функцию islower), а также
  2. предыдущий символ не был буквой - заглавной или строчной (это можно проверить стандартной библиотечной функцией isalpha).

Таким образом, вы должны помнить "последнее состояние" (встречается с любой буквой); если текущим символом является другая буква, а последней - нет, вы должны заглавными буквами. (В принципе вы можете использовать isalpha и здесь, но вам нужно только проверить, является ли она строчной буквой, потому что, если она уже прописная, вам не нужно ее менять.)

После вывода символа (измененного или нет) сохраните его как новое состояние для lastWasLetter, Я изменил название и функцию с оригинала previouscharпотому что вам не нужно проверять фактическое значение - вам нужно только знать, было ли это буква или нет.

#include <stdio.h>
#include <ctype.h>

void cptlz (const char *x);

int main(){

    cptlz("in.txt");

    return 0;
}

void cptlz (const char *input_filename)
{
    int ch, lastWasLetter = 0;

    FILE *fptr_in;

    fptr_in = fopen (input_filename,"r");
    if(fptr_in == NULL)
    {
        printf ("Error reading file '%s'\n", input_filename);
        return;
    }
    while ( (ch = fgetc (fptr_in)) != EOF )
    {
        if (!lastWasLetter && islower(ch))
            ch = toupper(ch);
        printf ("%c",ch);
        lastWasLetter = isalpha(ch);
    }
    fclose (fptr_in);
}
Другие вопросы по тегам