int k = 0;
char alp[5];
char grp[5] = { '1','8','i','y','\0' };
printf("%d", grp[2]);
for (int i = 0; i < strlen(grp) - 1; i++)
{
if ((grp[i] >= 48 && grp[i] <= 57) || (grp[i] >= 65 && grp[i] <= 90))
{
alp[k] = grp[i];
k++;
}
}
alp[strlen(alp)] = '\0';
printf("%d", grp[0]);
puts(alp);
return 0;
char alp[5];这里改成 char alp[5]={0};否则,在alp[strlen(alp)] = '\0';这句话中,strlen(alp)可能得不到正确的值。
因为char alp[5];这里没有给alp数组初始化,在不同的编译器中,处理方式不一样,有的编译器会自动把元素置0,有的编译器则是分配的随机值,所以,如果不给alp初始化,在alp[strlen(alp)] = '\0';这句话中,strlen(alp)可能得不到正确的值。
代码修改如下:
#include <stdio.h>
#include <string.h>
int main()
{
int k = 0;
char alp[5]={0};
char grp[5] = { '1','8','i','y','\0' };
printf("%d", grp[2]);
for (int i = 0; i < strlen(grp) - 1; i++)
{
if ((grp[i] >= 48 && grp[i] <= 57) || (grp[i] >= 65 && grp[i] <= 90))
{
alp[k] = grp[i];
k++;
}
}
alp[strlen(alp)] = '\0';
printf("%d", grp[0]);
puts(alp);
return 0;
}
有输出啊
你题目的解答代码如下:
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
int main()
{
int k = 0;
char alp[5];
char grp[5] = { '1','8','i','y','\0' };
printf("%d ", grp[2]);
for (int i = 0; i < strlen(grp); i++) //strlen(grp)取的长度不包含\0,不要 - 1
{
if ((grp[i] >= 48 && grp[i] <= 57) || (grp[i] >= 65 && grp[i] <= 90))
{
alp[k] = grp[i];
k++;
}
}
// alp[strlen(alp)] = '\0';
alp[k] = '\0'; //应该是k
printf("%d ", grp[0]);
puts(alp);
return 0;
}
如有帮助,请点击我的回答下方的【采纳该答案】按钮帮忙采纳下,谢谢!