将首字母大写归档

时间:2014-10-28 12:03:57

标签: c file-io letters

我正在尝试将首字母大写。字符从文本文件中读取。不幸的是,我做不到。我读了一个想法,它说添加两个布尔变量,可以是int类型:当前一个字符是单词的一部分时,一个变量将保持1,当前一个字符是单词的一部分时,另一个变量将保持1。但是,我怎么知道char是否是单词的一部分?

#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 个答案:

答案 0 :(得分:0)

试试这段代码..

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 :(得分:0)

一个角色是&#34;一个词的一部分&#34;如果符合以下条件,则应大写:

  1. 它是一个小写字符a..z(您可以使用标准库函数islower ),
  2. 上一个字符不是一个字母 - 大写或小写(可以通过标准库函数isalpha进行测试)。
  3. 所以你必须记住&#34;最后状态&#34; (遇到任何字母);当当前字符是另一个字母时,最后一个字母不是,你必须大写它。 (原则上你也可以在这里使用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);
    }