读取文本文件和 C 中每个单词的大写首字母
Read a text file and uppercase first letter of every word in C
我想读取现有文件并将每个单词的第一个字母大写。所以我想我可以从它们之间的 space 中找出单词,但我不知道如何关注第一个字母所以我只把所有字母都变成大写,这是我目前的代码。
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
#include <ctype.h>
int main()
{
int chr,i;
FILE *fp;
fp = fopen("DATA.txt" , "r");
do
{
chr = fgetc(fp);
chr = toupper(chr);
printf("%c" , chr);
if (chr==' ')
{
getch();
}
} while(chr!=EOF);
fclose(fp);
}
假设你真的想在每个 space 被读取后等待(假设你的 getch() 在那里的原因),那么你可以尝试在你的 do 循环之前设置 i = 0 。 Then if( i == 0 ) then chr = toupper(chr) and increment i.最后,在 if( chr == ' ') 中再次包含 i = 0 。
此外,如果您想考虑其他间距字符(换行符、制表符等),那么您应该 include <ctype.h>
并使用 isspace() 函数,例如 if( isspace(chr) )
而不是 if( chr == ' ' )
.
这应该可以解决问题
bool upperNext = true;
while((chr = fgetc(fp)) != EOF) {
if(chr == ' ' || chr == '\r' || chr == '\n') {
upperNext = true;
} else if(upperNext) {
chr = toupper(chr);
upperNext = false;
}
printf("%c" , chr);
}
... how to focus on first letter ...(?)
通过保存前一个字符来检测每个单词的第一个字母。让一个词与 1) <white-space><Letter>
的任何序列或 2) 如果读取的第一个字符是字母。
其他问题:EOF
检测太晚。在 fgetc()
之后立即检查 EOF
// EOF test too late
chr = fgetc(fp);
chr = toupper(chr);
printf("%c" , chr);
} while(chr!=EOF); // too late
// Instead
chr = fgetc(fp);
if (chr == EOF) break;
一起
int previous = ' ';
while ((chr = fgetc(fp)) != EOF) {
if (isspace(previous) && isalpha(chr)) {
chr = toupper(chr); // uppercase first letter of every word
}
printf("%c" , chr);
previous = chr;
}
我想读取现有文件并将每个单词的第一个字母大写。所以我想我可以从它们之间的 space 中找出单词,但我不知道如何关注第一个字母所以我只把所有字母都变成大写,这是我目前的代码。
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
#include <ctype.h>
int main()
{
int chr,i;
FILE *fp;
fp = fopen("DATA.txt" , "r");
do
{
chr = fgetc(fp);
chr = toupper(chr);
printf("%c" , chr);
if (chr==' ')
{
getch();
}
} while(chr!=EOF);
fclose(fp);
}
假设你真的想在每个 space 被读取后等待(假设你的 getch() 在那里的原因),那么你可以尝试在你的 do 循环之前设置 i = 0 。 Then if( i == 0 ) then chr = toupper(chr) and increment i.最后,在 if( chr == ' ') 中再次包含 i = 0 。
此外,如果您想考虑其他间距字符(换行符、制表符等),那么您应该 include <ctype.h>
并使用 isspace() 函数,例如 if( isspace(chr) )
而不是 if( chr == ' ' )
.
这应该可以解决问题
bool upperNext = true;
while((chr = fgetc(fp)) != EOF) {
if(chr == ' ' || chr == '\r' || chr == '\n') {
upperNext = true;
} else if(upperNext) {
chr = toupper(chr);
upperNext = false;
}
printf("%c" , chr);
}
... how to focus on first letter ...(?)
通过保存前一个字符来检测每个单词的第一个字母。让一个词与 1) <white-space><Letter>
的任何序列或 2) 如果读取的第一个字符是字母。
其他问题:EOF
检测太晚。在 fgetc()
EOF
// EOF test too late
chr = fgetc(fp);
chr = toupper(chr);
printf("%c" , chr);
} while(chr!=EOF); // too late
// Instead
chr = fgetc(fp);
if (chr == EOF) break;
一起
int previous = ' ';
while ((chr = fgetc(fp)) != EOF) {
if (isspace(previous) && isalpha(chr)) {
chr = toupper(chr); // uppercase first letter of every word
}
printf("%c" , chr);
previous = chr;
}