c++ 输入字符串以及输出 的相关问题

2025-02-24 09:19:55
推荐回答(2个)
回答1:

第一个问题:“a[0]和zimu++写成两行就可以正确运行,直接写a[0]=zimu++就比正确答案少1

a[0]和zimu++写成两行的情况下:

//如果此时zimu = 0
zimu++//执行完此句,zimu = 1
a[0]=zimu//那么,a[0] = 1

写a[0]=zimu++的情况下:

//如果此时zimu = 0
a[0] = zimu++//那么,a[0] = 0,a[0]得到是zimu++运算式的值(0),而不是此时zimu的值(1)。

第二个问题:“加入我只输入“abc123”, 那么输出就变成了“3 3 -858993460 -858993460“,不应该是“3 3 0 0”么”

原因是数组a[4]没有初始化,参考如下:

int a[4] = { 0 };

回答2:

#include
using namespace std;
int tongji(char c[], int a[]);
int main()
{
char str[100];
int i,a[4]={0}; //初始化即可
cin.getline(str,99);
tongji(str,a);
for(i=0; i<4; i++)
cout< cout< return 0;
}

int tongji(char st[], int a[])
{
int i,x=0;
int zimu=0,shuzi=0,space=0,other=0;
for(i=0;st[i]!='\0';i++)
x++;
for(i=0;i {
if((st[i]>='a'&&st[i]<='z')||(st[i]>='A'&&st[i]<='Z'))
{
zimu++;
a[0]=zimu;
}
else
if(st[i]>='0'&&st[i]<='9')
{
shuzi++; a[1]=shuzi;
}
else
if(st[i]==32)
{
space++; //少写了一个s
a[2]=space;
}
else
{
other++;
a[3]=other;
}
}
return 0;
}