忧默的小男孩 2022-02-22 17:14 采纳率: 94.4%
浏览 80
已结题

能不能帮我看看我的代码的问题,不要新代码,我只想我这个能运行。

这个题目我之前已经问过一次了,还是没有搞懂,之前有个回复说我的程序里是定义了一个字符串,而不是一个字符数组,字符串和字符数组有啥区别吗?按照昨天回复我的回答,我今天把我的代码中定义的z数组全部初始化为了0,把输入给数组中的scanf中的z前面的取地址符也去掉了,在我下面if的比较中在数字字符的两边也加上了'',昨天还是啥也没输出出来,今天已经变成了报错了。

我的思路其实很简单,就是向电脑中输入n行字符串,我想把这n行字符串存到数组中,然后这n行字符串肯定是在数组中按照一个字符一位存储的,所以第二串字符串肯定就是在第一串字符串的基础上加上一个'\0',然后接着往数组的下一位存储啊,所以我就遍历这个数组,但是不知道为啥啥也输出不出来。还有我最后一张图片里的回复,他说只用遍历一遍字符串,他写的代码的意思是,输入一行字符串后就输出结果,然后再输出一行字符串吗?

烦死我了,帮帮我吧😭一个字符串数组快两天了才做了三个。


 
#include<stdio.h>
int main(void)
{
    /*********Begin*********/
    int n,number,i,k,j,p;
     number=0,p=0;
    char z[1000]={0};     /* 定义一个字符数为1000的数组,防止输入字符串过长溢出*/
 
    scanf("%d",&n);   /*输入代表测试实例个数的n*/
    
    for(j=0;j<n;j++)  /*这几行代码的作用是输入测试的字符,当输完一串之后,输出换行符换行,继续输入下一串,直到n行字符串全部输入完成*/
    scanf("%s",z);
    printf("\n");
   
 
    for(k=0;k<n;k++)   /*这个for语句的作用是把n行字符串全部执行完*/
    {          
    for(i=p;i<1000;i++)    
    {   p=i;             /*这个语句的作用是当执行完某一行字符串时,可以在数组中接着上一行的数组地址往下执行,而不是重新从数组z[0]开始执行*/
    if(z[i]!='\0')     /*如果为换行符,则跳出此循环*/
    {
        if((z[i]>='0 '&& z[i]<='9'))
        {
            number=number+1;
        }
    }
    else 
     p=p+1continue;
    }
    printf("%d\n",number);
    }
 
    /*********End**********/
    return 0;
}

img

img

img

img

  • 写回答

4条回答 默认 最新

  • 5年helloword开发经验 2022-02-22 18:17
    关注
     
    #include<stdio.h>
    #include <string.h>
    int main(void)
    {
        /*********Begin*********/
        int n,number,i,k,j,p;
        number=0,p=0;
        
        
        scanf("%d",&n);/*输入代表测试实例个数的n*/
        char z[100][200]={0};/*定义100个字符数为200的字符串数组,防止输入字符串过长溢出*/
        
        for(j=0;j<n;j++)/*这几行代码的作用是输入测试的字符,当输完一串之后,输出换行符换行,继续输入下一串,直到n行字符串全部输入完成*/    
        {
            scanf("%s",z[j]);        
        }
        
        /*for(j=0;j<n;j++)//这几行代码的作用是输入测试的字符,当输完一串之后,输出换行符换行,继续输入下一串,直到n行字符串全部输入完成    
        {
            //scanf("%s",z[i]);
            printf("%s\n",z[j]);        
        }*/
        
        for(i=0;i<n;i++) //这个for语句的作用是把n行字符串全部执行完
        {
            number=0,k=0;
            //p=i;//这个语句的作用是当执行完某一行字符串时,可以在数组中接着上一行的数组地址往下执行,而不是重新从数组z[0]开始执行
            while(z[i][k])//如果为换行符,则跳出此循环
            {
                if((z[i][k]>='0'&&z[i][k]<='9'))
                    number=number+1;    
                k++;
            }
            printf("%d\n",number);
       }
        /*********End**********/
        return 0;
    }
     
    
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(3条)

报告相同问题?

问题事件

  • 已结题 (查看结题原因) 2月27日
  • 已采纳回答 2月23日
  • 创建了问题 2月22日

悬赏问题

  • ¥15 随身WiFi网络灯亮但是没有网络,如何解决?
  • ¥15 gdf格式的脑电数据如何处理matlab
  • ¥20 重新写的代码替换了之后运行hbuliderx就这样了
  • ¥100 监控抖音用户作品更新可以微信公众号提醒
  • ¥15 UE5 如何可以不渲染HDRIBackdrop背景
  • ¥70 2048小游戏毕设项目
  • ¥20 mysql架构,按照姓名分表
  • ¥15 MATLAB实现区间[a,b]上的Gauss-Legendre积分
  • ¥15 delphi webbrowser组件网页下拉菜单自动选择问题
  • ¥15 linux驱动,linux应用,多线程