m0_74153183 2022-10-19 23:53 采纳率: 95.5%
浏览 115
已结题

写一个程序,其命令行包括一个字符参数s,运行中由标准输入读入一系列正文,该程序把所有行依次输出,并在那些包含字符串s的行前面标一个星号。

问题遇到的现象和发生背景

(命令行参数)写一个程序,其命令行包括一个字符参数s,运行中由标准输入读入一系列正文,该程序把所有行依次输出,并在那些包含字符串s的行前面标一个星号。
提示:可使用系统函数 strstr(str*, substr*),它判断一个字符串substr是否为另一个字符串str的子串。

用代码块功能插入代码,请勿粘贴截图
#include<stdio.h>
#include<string.h>
int main()
{
    char s;
    int i = 0;
    char a[100][100];
    scanf_s("%c",&s);
    while (scanf_s("%s",a[i]) != EOF)
    {
        i++;
    }
    int len[100], count = 0;
    for (int j = 0; j < i; j++)
    {
        len[j] = strlen(a[j]);
    }
    for (int j = 0; j < i; j++)
    {
        count = 0;
        for (int k = 0; k < len[j]; k++)
        {
            if (a[j][k] == s)
            {count++;
                
            }
        }
        if (count > 0)
        {
            for (int o = 0; o < len[j]; o++)
            {
                a[j][o + 1] = a[j][o];
                a[j][len[j] + 1] = "\0";
                a[j][0] = "*";
            }
        }
    }
    for (int j = 0; j < i; j++)
    {
        puts(a[j]);
    }
}

运行结果及报错内容

img

img

我的解答思路和尝试过的方法

我觉得写的没有问题,为什么会报错呢

  • 写回答

1条回答 默认 最新

  • qzjhjxj 2022-10-20 08:35
    关注

    改动处见注释,供参考:

    #include<stdio.h>
    #include<string.h>
    int main()
    {
        char s;
        int i = 0;
        char a[100][100];
        scanf_s("%c", &s, 1);   //修改
        while (scanf_s("%s", a[i], 100) != EOF) //修改
        {
            i++;
        }
        int len[100], count = 0;
        for (int j = 0; j < i; j++)
        {
            len[j] = strlen(a[j]);
        }
        for (int j = 0; j < i; j++)
        {
            count = 0;
            for (int k = 0; k < len[j]; k++)
            {
                if (a[j][k] == s)
                {
                    count++;
                }
            }
            if (count > 0)
            {
                for (int o = len[j]; o > 0; o--)
                    //for (int o = 0; o < len[j]; o++) 修改
                {
                    a[j][o] = a[j][o - 1];//a[j][o + 1] = a[j][o]; 修改
                }
                a[j][0] = '*';           //a[j][0] = " * ";  修改
                a[j][len[j] + 1] = '\0'; //a[j][len[j] + 1] = "\0";    修改    
            }
        }
        for (int j = 0; j < i; j++)
        {
            puts(a[j]);
        }
    }
    
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

问题事件

  • 系统已结题 10月28日
  • 已采纳回答 10月20日
  • 创建了问题 10月19日

悬赏问题

  • ¥15 怎样才能让鼠标沿着线条的中心线轨迹移动
  • ¥60 用visual studio编写程序,利用间接平差求解水准网
  • ¥15 Llama如何调用shell或者Python
  • ¥20 谁能帮我挨个解读这个php语言编的代码什么意思?
  • ¥15 win10权限管理,限制普通用户使用删除功能
  • ¥15 minnio内存占用过大,内存没被回收(Windows环境)
  • ¥65 抖音咸鱼付款链接转码支付宝
  • ¥15 ubuntu22.04上安装ursim-3.15.8.106339遇到的问题
  • ¥15 blast算法(相关搜索:数据库)
  • ¥15 请问有人会紧聚焦相关的matlab知识嘛?