2023-04-06 06:11 采纳率: 50%
浏览 25
已结题

大一程序上机,使用代码越简单越好

在main函数中创建一个文件,将键盘输入的字符串(该字符串只包含数字、字母和*)写入文件中。打开该文件,读出字符串。若字符串中号多于n个,则删除多余的号;若少于或等于n个,则输出*号的个数,并将新串存放到另一个文件中。要求:n由键盘输入

  • 写回答

2条回答 默认 最新

  • 百科新知 2023-04-06 09:02
    关注

    引用新必应

    以下是一个简单的C程序示例,可以创建一个文件并将键盘输入的字符串写入该文件中,然后读取文件内容,并按照要求进行处理:

    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    
    int main() {
        int n;  // 定义变量 n
        printf("请输入 n 的值:");
        scanf("%d", &n);  // 接收用户输入 n 的值
    
        char str[1024];  // 定义字符串变量 str,最多存储 1024 个字符
        printf("请输入一个字符串:");
        scanf("%s", str);  // 接收用户输入的字符串
    
        FILE* fp;  // 定义文件指针
        fp = fopen("test.txt", "w");  // 创建一个名为 test.txt 的文件,并以写入模式打开
        if (fp == NULL) {  // 判断文件是否成功打开
            printf("文件创建失败\n");
            exit(1);  // 如果文件打开失败,直接退出程序
        }
        fprintf(fp, "%s", str);  // 将字符串写入文件
        fclose(fp);  // 关闭文件
    
        fp = fopen("test.txt", "r");  // 以读取模式打开文件
        if (fp == NULL) {  // 判断文件是否成功打开
            printf("文件打开失败\n");
            exit(1);  // 如果文件打开失败,直接退出程序
        }
        fseek(fp, 0, SEEK_END);  // 将文件指针移动到文件末尾
        int file_length = ftell(fp);  // 获取文件长度
        fseek(fp, 0, SEEK_SET);  // 将文件指针移回文件头
    
        char* file_content = (char*)malloc(file_length + 1);  // 根据文件长度动态分配内存
        fread(file_content, file_length, 1, fp);  // 读取文件内容到内存中
        fclose(fp);  // 关闭文件
    
        int asterisk_count = 0;  // 定义变量存储 * 号的个数
        char* new_str = (char*)malloc(file_length + 1);  // 根据文件长度动态分配内存
        int new_str_pos = 0;
        for (int i = 0; i < file_length; i++) {
            if (file_content[i] == '*') {
                asterisk_count++;
            }
            else {
                new_str[new_str_pos++] = file_content[i];
            }
        }
        new_str[new_str_pos] = '\0';  // 给新字符串末尾加上结束符
    
        if (strlen(new_str) > n) {  // 如果新字符串中字符多于 n 个
            int delete_count = strlen(new_str) - n;
            printf("删除了 %d 个 * 号\n", delete_count);
            for (int i = 0; i < delete_count; i++) {
                for (int j = strlen(new_str) - 1; j > 0; j--) {
                    if (new_str[j] == '*') {
                        new_str[j] = '\0';
                        break;
                    }
                }
            }
        }
        else if (strlen(new_str) <= n) {  // 如果新字符串中字符少于或等于 n 个
            printf("* 号的个数为 %d\n", asterisk_count);
            fp = fopen("new_test.txt", "w");  // 创建另一个名为 new_test.txt 的文件,并以写入模式打开
            fprintf(fp, "%s", new_str);  // 将新字符串写入新文件中
            fclose(fp);  // 关闭文件
        }
    
        free(file_content);  // 释放动态分配的内存
        free(new_str);
    
        return 0;
    }
    

    程序中首先接收用户输入的 n 值和字符串,然后创建一个名为 test.txt 的文件,并将字符串写入该文件中。接着以读取模式打开文件,并将文件内容读取到内存中。随后判断文件中 * 号的个数,并根据要求进行处理。如果新字符串中字符多于 n 个,则删除多余的 * 号;如果少于或等于 n 个,则输出 * 号的个数并将新字符串存入另一个名为 new_test.txt 的文件中。

    需要注意的是,在实际使用中,我们需要进行一些错误处理,例如判断文件是否成功创建、打开和关闭等,这里只是简单示范了程序的实现方法。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

问题事件

  • 系统已结题 4月21日
  • 已采纳回答 4月13日
  • 创建了问题 4月6日

悬赏问题

  • ¥20 完全没有学习过GAN,看了CSDN的一篇文章,里面有代码但是完全不知道如何操作
  • ¥15 使用ue5插件narrative时如何切换关卡也保存叙事任务记录
  • ¥20 软件测试决策法疑问求解答
  • ¥15 win11 23H2删除推荐的项目,支持注册表等
  • ¥15 matlab 用yalmip搭建模型,cplex求解,线性化处理的方法
  • ¥15 qt6.6.3 基于百度云的语音识别 不会改
  • ¥15 关于#目标检测#的问题:大概就是类似后台自动检测某下架商品的库存,在他监测到该商品上架并且可以购买的瞬间点击立即购买下单
  • ¥15 神经网络怎么把隐含层变量融合到损失函数中?
  • ¥15 lingo18勾选global solver求解使用的算法
  • ¥15 全部备份安卓app数据包括密码,可以复制到另一手机上运行