我正在尝试将首字母大写。字符从文本文件中读取。不幸的是,我做不到。我读了一个想法,它说添加两个布尔变量,可以是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);
}
}
}
答案 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;如果符合以下条件,则应大写:
a..z
(您可以使用标准库函数islower
),isalpha
进行测试)。所以你必须记住&#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);
}