c++ 输入字符串以及输出 的相关问题
题目描述编写一函数,由实参传来一个字符串,统计此字符串中字母、数字、空格和其它字符的个数,在主函数中输入字符串以及输出上述结果。只要结果,别输出什么提示信息。输入一行字符...
题目描述
编写一函数,由实参传来一个字符串,统计此字符串中字母、数字、空格和其它字符的个数,在主函数中输入字符串以及输出上述结果。 只要结果,别输出什么提示信息。
输入
一行字符串
输出
统计数据,4个数字,空格分开。
样例输入
!@#$%^QWERT 1234567
样例输出
5 7 4 6
以下是我写的程序 运行无误 但是我有几个问题
在自定义函数里为什么把a[0]和zimu++写成两行就可以正确运行,直接写a[0]=zimu++就比正确答案少1
加入我只输入“abc123”, 那么输出就变成了“3 3 -858993460 -858993460“,不应该是“3 3 0 0”么~搞不懂~求解答~
#include <iostream>using namespace std;int tongji(char c[], int a[]);
int main(){ char str[100]; int i,a[4]; cin.getline(str,99); tongji(str,a); for(i=0; i<4; i++) cout<<a[i]<<" "; cout<<endl; 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<x;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++; a[2]=space;} else {other++; a[3]=other;} } return 0;} 展开
编写一函数,由实参传来一个字符串,统计此字符串中字母、数字、空格和其它字符的个数,在主函数中输入字符串以及输出上述结果。 只要结果,别输出什么提示信息。
输入
一行字符串
输出
统计数据,4个数字,空格分开。
样例输入
!@#$%^QWERT 1234567
样例输出
5 7 4 6
以下是我写的程序 运行无误 但是我有几个问题
在自定义函数里为什么把a[0]和zimu++写成两行就可以正确运行,直接写a[0]=zimu++就比正确答案少1
加入我只输入“abc123”, 那么输出就变成了“3 3 -858993460 -858993460“,不应该是“3 3 0 0”么~搞不懂~求解答~
#include <iostream>using namespace std;int tongji(char c[], int a[]);
int main(){ char str[100]; int i,a[4]; cin.getline(str,99); tongji(str,a); for(i=0; i<4; i++) cout<<a[i]<<" "; cout<<endl; 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<x;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++; a[2]=space;} else {other++; a[3]=other;} } return 0;} 展开
2个回答
展开全部
第一个问题:“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 };
追问
谢谢!回答的太棒啦
展开全部
#include <iostream>
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<<a[i]<<" ";
cout<<endl;
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<x;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;
}
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<<a[i]<<" ";
cout<<endl;
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<x;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;
}
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询