使用C更改文件中单词首字母的大小写

标签 c file-handling

我正在尝试使用 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/

相关文章:

iphone - 不要在自己的静态库中公开已用库中的符号

c - 从 txt.file 读取链接列表,需要帮助更正代码

c - 这个变量的值是如何在这个循环之外递增的?

C 获取位/设置位合并

c - 如何验证操作系统是否支持 avx2 指令

具有关联扩展名的 Python 可执行运行文件

java - flush() java 文件处理

c - fprintf 不写任何东西

java - 如何在不定义位置的情况下读取文本文件?

C++ 从文件中读取