我正在尝试使用 C 更改文件中单词首字母的大小写。
例如,如果文件包含句子:good morning.how are you?
然后它将更改为 Good Morning.How Are You?
我尝试了很多,但无法产生预期的结果。 谁能帮我?我使用这段代码:
#include <stdio.h>
void main() {
FILE *fp1;
char ch;
int p;
fp1 = fopen("asiftext.txt", "a+");
ch = fgetc(fp1);
if (ch >= 'a' && ch <= 'z') {
fseek(fp1, -1, 1);
ch = toupper(ch);
fputc(ch, fp1);
}
while ((ch = fgetc(fp1)) != EOF) {
if (ch == ' ' || ch == '\n') {
ch = fgetc(fp1);
if (ch == EOF)
break;
if (ch >= 97 && ch <= 122) {
fseek(fp1, -1, 1);
fputc(ch - 32, fp1);
}
}
}
/*ch = fgetc(fp1);
p = ftell(fp1);
printf("p1=%d", p);
printf("%c\n", ch);
fseek(fp1, -1, 1);
fputc(ch - 32,fp1);
ch = fgetc(fp1);
printf("c=%c\n", ch); */
fclose(fp1);
}
最佳答案
就地修改文件不是个好主意。为此使用标准流既麻烦又低效。
这是一个简单的过滤器,它读取 stdin
并将修改后的单词写入 stdout
:
#include <ctype.h>
#include <stdio.h>
int main(void) {
int c, lastc = '\n';
while ((c = getchar()) != EOF) {
if (!isalpha(lastc))
c = toupper(c);
putchar(c);
lastc = c;
}
return 0;
}
请注意,以上代码适用于 ASCII 文本文件。它可能不适用于非 ASCII 文件,尤其是当它们使用多字节编码(例如 UTF-8)进行编码时。
关于使用C更改文件中单词首字母的大小写,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48905449/