注册 登录
编程论坛 C++教室

[求助]循环结构程序设计

静静不悲伤 发布于 2007-09-27 14:59, 1091 次点击

循环结构程序设计

输入一行字符,要求统计出英文字母、数字和其它字符的个数。


小弟最近看到一道C++题,百思不得其解,希望高人帮在下指点一二,不胜感激.

17 回复
#2
远去的列车2007-09-27 15:34
“输入一行字符” 不解,还是统计个数不解呢?
#3
cuiyuzheng2007-09-27 16:28
#4
TenY2007-09-27 21:48
[CODE][/CODE]
string str ;
cout << "please type in the string" << endl ;
cin >> str ;
// define three counter for number, letter(upper,lower), other characters , separately.
int num = 0 ;
int letter = 0 ;
int otherChar = 0 ;
for(string::iterator iter = str.begin() ; iter != str.end() ; ++iter)
{
if ( (*iter == '0')
||(*iter == '1')
||(*iter == '2')
||(*iter == '3')
||(*iter == '4')
||(*iter == '5')
||(*iter == '6')
||(*iter == '7')
||(*iter == '8')
||(*iter == '9')
)
{
++num;
}
else if( (*iter == 'a')
||(*iter == 'A')
||(*iter == 'b')
||(*iter == 'B')
||(*iter == 'c')
||(*iter == 'C')
||(*iter == 'd')
||(*iter == 'D')
||(*iter == 'e')
||(*iter == 'E')
||(*iter == 'f')
||(*iter == 'F')
||(*iter == 'g')
||(*iter == 'G')
||(*iter == 'h')
||(*iter == 'H')
||(*iter == 'i')
||(*iter == 'I')
||(*iter == 'j')
||(*iter == 'J')
||(*iter == 'k')
||(*iter == 'K')
||(*iter == 'l')
||(*iter == 'L')
||(*iter == 'm')
||(*iter == 'M')
||(*iter == 'n')
||(*iter == 'N')
||(*iter == 'o')
||(*iter == 'O')
||(*iter == 'p')
||(*iter == 'P')
||(*iter == 'q')
||(*iter == 'Q')
||(*iter == 'r')
||(*iter == 'R')
||(*iter == 's')
||(*iter == 'S')
||(*iter == 't')
||(*iter == 'T')
||(*iter == 'u')
||(*iter == 'U')
||(*iter == 'v')
||(*iter == 'V')
||(*iter == 'w')
||(*iter == 'W')
||(*iter == 'x')
||(*iter == 'X')
||(*iter == 'y')
||(*iter == 'Y')
||(*iter == 'z')
||(*iter == 'Z'))
{
++letter ;
}
else
{
++otherChar ;
}
}
cout << "there is " << num << " numbers, " << letter << " letters, " << otherChar
<< " other characters. " << endl ;

应该是这样.
#5
mingreign2007-09-27 22:25
回复:(TenY)[CODE][/CODE] string str ; cou...
   难道你就不觉得麻烦吗?简化一下吧,很简单的.
#6
caixingxin2007-09-27 23:19

isdigit()
isalpha()....之类的函数就可以了,自己找下~


#7
野比2007-09-28 02:06

4楼和6楼的方法都有些“炮打蚊子”的意思了
比较简单的
int main(){
unsigned int alpha, digit, other; //分别保存字母、数字、其他的字符数
unsigned char str[256]={0};
//读取字符串,假设已经放到str[]中(略)
long i=0;
while(str[i])
if((str[i]>='a'&&str[i]<='z')||(str[i]>='A'&&str[i]<='Z'))
++alpha;
elseif(str[i]>='0'&&str[i]<='9')
++digit;
else
++other;
return 0;
}

计算结果alpha即是字母数,digit是数字数,other是特殊字符数

#8
aipb20072007-09-28 13:16
LZ的题目有歧意。
#9
he52202007-10-02 11:29
恩~~~  是每个字符或数字的个数  还是如13楼所解??~~~
#10
Black_smart2007-10-02 19:26
7楼的方法很好,不过i貌似没有自增。。。,另外lz请说出不解的地方。

修改了一下:
#include<stdio.h>
void main()
{
int alpha=0, digit=0, other=0;
char str[256];
gets(str);
int i=0;
while(str[i])
{
if((str[i]>='a'&&str[i]<='z')||(str[i]>='A'&&str[i]<='Z'))
++alpha;
else
if(str[i]>='0'&&str[i]<='9')
++digit;
else
++other;
i++;
}
printf("%d\n%d\n%d\n",alpha,digit,other);
}

[此贴子已经被作者于2007-10-2 19:53:31编辑过]

#11
编程高手2007-10-03 02:50
Orz 4楼,你手指不累?
#12
csmenglei9512007-10-03 10:04
#include<iostream.h>
#include<string.h>
int main()
{
char* a=new char[50];
int i,m,sum1=0,sum2=0,sum3=0;
cout<<"please enter!"<<endl;
cin>>a;
m=strlen(a);
for(i=0;i<m;i++)
{
if(a[i]>=48&&a[i]<=59)
sum1++;
if(a[i]>=65&&a[i]<=90)
sum2++;
if(a[i]>=97&&a[i]<=122)
sum3++;
}
cout<<"数字共有"<<sum1<<"个"<<endl;
cout<<"大写字母共有"<<sum2<<"个"<<endl;
cout<<"小写字母共有"<<sum3<<"个"<<endl;
return 0;
}
#13
TenY2007-10-09 15:12
[QUOTE]

Orz 4楼,你手指不累?

[/QUOTE]

不累
#14
succubus2007-10-09 18:32
4楼的代码。。。。。
瀑布汗啊。。。
#15
china25qd2007-10-09 19:53
以下是引用TenY在2007-9-27 21:48:03的发言:
[CODE][/CODE]
string str ;
cout << "please type in the string" << endl ;
cin >> str ;
// define three counter for number, letter(upper,lower), other characters , separately.
int num = 0 ;
int letter = 0 ;
int otherChar = 0 ;
for(string::iterator iter = str.begin() ; iter != str.end() ; ++iter)
{
if ( (*iter == '0')
||(*iter == '1')
||(*iter == '2')
||(*iter == '3')
||(*iter == '4')
||(*iter == '5')
||(*iter == '6')
||(*iter == '7')
||(*iter == '8')
||(*iter == '9')
)
{
++num;
}
else if( (*iter == 'a')
||(*iter == 'A')
||(*iter == 'b')
||(*iter == 'B')
||(*iter == 'c')
||(*iter == 'C')
||(*iter == 'd')
||(*iter == 'D')
||(*iter == 'e')
||(*iter == 'E')
||(*iter == 'f')
||(*iter == 'F')
||(*iter == 'g')
||(*iter == 'G')
||(*iter == 'h')
||(*iter == 'H')
||(*iter == 'i')
||(*iter == 'I')
||(*iter == 'j')
||(*iter == 'J')
||(*iter == 'k')
||(*iter == 'K')
||(*iter == 'l')
||(*iter == 'L')
||(*iter == 'm')
||(*iter == 'M')
||(*iter == 'n')
||(*iter == 'N')
||(*iter == 'o')
||(*iter == 'O')
||(*iter == 'p')
||(*iter == 'P')
||(*iter == 'q')
||(*iter == 'Q')
||(*iter == 'r')
||(*iter == 'R')
||(*iter == 's')
||(*iter == 'S')
||(*iter == 't')
||(*iter == 'T')
||(*iter == 'u')
||(*iter == 'U')
||(*iter == 'v')
||(*iter == 'V')
||(*iter == 'w')
||(*iter == 'W')
||(*iter == 'x')
||(*iter == 'X')
||(*iter == 'y')
||(*iter == 'Y')
||(*iter == 'z')
||(*iter == 'Z'))
{
++letter ;
}
else
{
++otherChar ;
}
}
cout << "there is " << num << " numbers, " << letter << " letters, " << otherChar
<< " other characters. " << endl ;

应该是这样.

不就一循环+数组题么?
至于这么长?

#16
zeseler2007-10-09 21:12

用C写的拉!嘿嘿

#17
aipb20072007-10-09 21:24

都在说4楼的代码长,那也站几个人出来写点短的实现和他一样的功能啊!

不能光说不练哦!

#18
jack_sqh2007-10-10 15:35
修改了一下:
#include<iostream.h>
#include<string.h>
void main()
{
int alpha=0, digit=0, other=0;
char str[256];
char *s=str;
cin.getline(s,256,'\0');
int i=0;
while(str[i]!='\0')
{
if((str[i]>='a'&&str[i]<='z')||(str[i]>='A'&&str[i]<='Z'))
++alpha;
else
if(str[i]>='0'&&str[i]<='9')
++digit;
other=sizeof(s)-alpha-digit;
i++;
}
cout<<alpha<<"\n"<<digit<<"\n"<<other<<endl;
}
1