c语言解题:

2025-01-02 19:09:40
推荐回答(2个)
回答1:

main(){
int i;//计数变量
int j=0;//该字符串中,整数的个数。

int k;//当前整数的位数
int flag=0;//如果为0,则上一个字符不是数字。如果为1,则上一个字符是数字。
int max=0;//记录最长整数的位数。
char str[100]; //保存输入的字符串

char a[10][10]; /*保存输入字符串的所有整数,但整数最高只能有9位,且最多只能有9个整数,这是该方法的限制条件。*/
printf("请输入一串字符(包括数字)最多不超过99个字符\n");
gets(str);//从标准输入设备读取输入的字符串,并保存到str数组内,并以\0填充尾部。
for(i=0;str[i]!='\0';i++)//遍历整个字符串
{
if(48<=str[i]&&str[i]<=57)//如果当前字符为数字(0~9)
{
if(flag==0)//判断上一个字符是不是非数字。
{//上一个字符不是数字
j++;//开始记录一个新的整数,整数计数+1.
k=0;//将当前整数的位数清零
a[j][k]=str[i];//保存当前数字字符到数组a的第j个数字的第k位。
k++;//当前整数位数+1
flag=1;//设置flag,表示下一次查看flag时,上一个字符为数字。
}
else if(str[i+1]=='\0')
{//如果上一个字符是数字,并且当前字符为输入字符串的最后一个字符。
a[j][k]=str[i];//保存当前字符到数组a的第j个数字的第k位。
a[j][k+1]='\0';//并在尾部添加字符串结束符。
if(k+1>max) max=k+1;//判断第j个数字的位数是否为最大值,是则保存该位数。
}
else
{//如果上一个字符是数字
a[j][k]=str[i];//保存当前字符到a数组的第j个数字的第k位。
k++;//当前整数的位数+1
}

}//返回继续遍历下一个字符
else if(flag==1)
{//如果当前字符不是数字,并且上一个字符是数字。
if(k>max) max=k;//判断当前整数的位数是否为最大,是则保存到max
a[j][k]='\0';//给当前整数位数添加字符串结束符
flag=0;//将上一个字符标记位,标记成非数字。
}//返回继续遍历下一个字符
}//此处我添加了大括号,为了方便阅读。该大括号可以省略。

printf("输入的字符串中,最长的数字串有%d位数字。数字串一共有%d个,分别是:\n",max,j);
for(i=1;i<=j;i++)
printf("%s\n",a[i]);
}
以上,就是我的理解。。。能看明白了吧?

回答2:

看看是否详细,不懂可再追问

#include
#include
void main()
{
int i,j=0,k,flag=0,max=0;
char str[100],a[10][10]/*每个里面十个大小,总共十个*/;
printf("请输入一串字符(包括数字)\n");
gets(str); // 输入一个字符串
for(i=0;str[i]!='\0';i++) // 从第一个字字符开始遍历,遍历到字符串结尾
{
if(48<=str[i]&&str[i]<=57) // 如果字符串是数字'0'~'9'
{
if(flag==0) // flag标志记录当前算到的数字字符是否为同一个数字,flag为0表示数字的第一个字符,比如在"15"中的遇到'1'
{
j++;
k=0;
a[j][k]=str[i]; // 把该数字字符保存到数组a[j][k]里面
k++;
flag=1; // 标志改1,证明下一个字符不是数字的第一个字符,比如"15"时,下一个为'5'
}
else if(str[i+1]=='\0') // 否则,如果当前字符是最后一个字符
{
a[j][k]=str[i]; // 也是把该数字字符保存到数组a[j][k]里面
a[j][k+1]='\0'; // 将最后一个字符赋值为'\0'
if(k+1>max) max=k+1;
}
else
{
a[j][k]=str[i]; // 否则单单把该数字字符保存到数组a[j][k]里面
k++;
}
}
else if(flag==1) // 如果当前字符不是第一个数字字符,
{
if(k>max) max=k; // 数字串数加1个
a[j][k]='\0'; // 字符串结尾填充'\0'
flag=0; // 标志设回去
}
}
printf("输入的字符串中,最长的数字串有%d位数字。数字串一共有%d个,分别是:\n",max,j); // 打印
for(i=1;i<=j;i++) // 打印所有字符串
printf("%s\n",a[i]);
}