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

这个题目我之前已经问过一次了,还是没有搞懂,之前有个回复说我的程序里是定义了一个字符串,而不是一个字符数组,字符串和字符数组有啥区别吗?按照昨天回复我的回答,我今天把我的代码中定义的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

 
#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;
}
 

字符串和字符数组的差别是字符串最后一个字符是'\0',字符数组不一定
你这个题目哪有那么麻烦啊,多个实例只需要用个for循环就好了啊

#include <stdio.h>
int main()
{
    char s[1000] = {0};
    int i=0,j,n,count=0;
    scanf("%d",&n);
    for(i=0;i<n;i++)
    {
        scanf("%s",s);
        j=0;
        count=0;
        while(s[j] != '\0')
        {
            if(s[j] >='0' && s[j] <='9')
                count++;
            j++;
        }
        printf("%d\n",count);
    }
    return 0;
}

字符数组和字符串比较容易混淆,你有个错误就是字符数组只有在定义时才能将整个字符串一次性地赋值给它,一旦定义完了,就只能一个字符一个字符地赋值了。你可以看看下面的基础。
http://c.biancheng.net/cpp/html/2921.html#:~:text=%E5%AD%97%E7%AC%A6%E6%95%B0%E7%BB%84%E5%AE%9E%E9%99%85%E4%B8%8A%E6%98%AF%E4%B8%80%E7%B3%BB%E5%88%97%E5%AD%97%E7%AC%A6%E7%9A%84%E9%9B%86%E5%90%88%EF%BC%8C%E4%B9%9F%E5%B0%B1%E6%98%AF%20%E5%AD%97%E7%AC%A6%E4%B8%B2%EF%BC%88String%EF%BC%89%20%E3%80%82%20%E5%9C%A8C%E8%AF%AD%E8%A8%80%E4%B8%AD%EF%BC%8C%E6%B2%A1%E6%9C%89%E4%B8%93%E9%97%A8%E7%9A%84%E5%AD%97%E7%AC%A6%E4%B8%B2%E5%8F%98%E9%87%8F%EF%BC%8C%E6%B2%A1%E6%9C%89string%E7%B1%BB%E5%9E%8B%EF%BC%8C%E9%80%9A%E5%B8%B8%E5%B0%B1%E7%94%A8%E4%B8%80%E4%B8%AA%E5%AD%97%E7%AC%A6%E6%95%B0%E7%BB%84%E6%9D%A5%E5%AD%98%E6%94%BE%E4%B8%80%E4%B8%AA%E5%AD%97%E7%AC%A6%E4%B8%B2%E3%80%82%20%E6%95%B0%E7%BB%84%E7%AC%AC%200%20%E4%B8%AA%E5%85%83%E7%B4%A0%E4%B8%BA%20%27c%27,1%20%E4%B8%AA%E5%85%83%E7%B4%A0%E4%B8%BA%20%27.%27%20%EF%BC%8C%E7%AC%AC%202%20%E4%B8%AA%E5%85%83%E7%B4%A0%E4%B8%BA%20%27b%27%20%EF%BC%8C%E5%90%8E%E9%9D%A2%E7%9A%84%E5%85%83%E7%B4%A0%E4%BB%A5%E6%AD%A4%E7%B1%BB%E6%8E%A8%E3%80%82

字符串全部输入完再输出数字个数的

#include<stdio.h>

int main()
{
    char z[1000];
    int count[150]= {0};
    int n,j,k;
    scanf("%d",&n);
    for(k=0; k<n; k++)
    {
        scanf("%s",z);
        for(j=0; z[j]!='\0'; j++)
        {
            if(z[j]<='9'&&z[j]>='0')
            {
                count[k]++;
            }
        }
    }
    for(j=0; j<k; j++)
    {
        printf("%d ",count[j]);
    }
    return 0;
}