c语言编程问题

输入一行字符,分别统计出其中英文字母、空格、数字、和其他字符的个数。#include<stdio.h>intmain(){charc;intletters=0,space... 输入一行字符,分别统计出其中英文字母、空格、数字、和其他字符的个数。
#include <stdio.h>
int main()
{
char c;
int letters=0,space=0,digit=0,other=0;
printf("输入一行字符:\n");
while((c=getchar())!='\n')
{
switch(c)
{
case 'A':letters++;break;
case 'B':letters++;break;
case 'C':letters++;break;
case 'D':letters++;break;
case 'E':letters++;break;
case 'F':letters++;break;
case 'G':letters++;break;
case 'H':letters++;break;
case 'I':letters++;break;
case 'J':letters++;break;
case 'K':letters++;break;
case 'L':letters++;break;
case 'M':letters++;break;
case 'N':letters++;break;
case 'O':letters++;break;
case 'P':letters++;break;
case 'Q':letters++;break;
case 'R':letters++;break;
case 'S':letters++;break;
case 'T':letters++;break;
case 'U':letters++;break;
case 'V':letters++;break;
case 'W':letters++;break;
case 'X':letters++;break;
case 'Y':letters++;break;
case 'Z':letters++;break;
case 'a':letters++;break;
case 'b':letters++;break;
case 'c':letters++;break;
case 'd':letters++;break;
case 'e':letters++;break;
case 'f':letters++;break;
case 'g':letters++;break;
case 'h':letters++;break;
case 'i':letters++;break;
case 'j':letters++;break;
case 'k':letters++;break;
case 'l':letters++;break;
case 'm':letters++;break;
case 'n':letters++;break;
case 'o':letters++;break;
case 'p':letters++;break;
case 'q':letters++;break;
case 'r':letters++;break;
case 's':letters++;break;
case 't':letters++;break;
case 'u':letters++;break;
case 'v':letters++;break;
case 'w':letters++;break;
case 'x':letters++;break;
case 'y':letters++;break;
case 'z':letters++;break;
case ' ':space++;break;
case 0:digit++;break;
case 1:digit++;break;
case 2:digit++;break;
case 3:digit++;break;
case 4:digit++;break;
case 5:digit++;break;
case 6:digit++;break;
case 7:digit++;break;
case 8:digit++;break;
case 9:digit++;break;
default:other++;break;
}
}
printf("字母数:%d\n空格数:%d\n数字数:%d\n其他字符数:%d\n",letters,space,digit,other);
}
问一下内循环用switch有没有简单方法?
展开
 我来答
rfz64433
2012-12-02 · TA获得超过979个赞
知道小有建树答主
回答量:5911
采纳率:0%
帮助的人:1327万
展开全部
编程发现的最长的单词在字符串中的一个已知的,它假定该字符串只包含字母和空格,空格用来分隔不同的话!

方法:

/ / VC + + 6.0编译器

包括
无效的主要() BR /> {
字符STR [] =“世界你好我的名字是曹寻医!”;
的char * p = STR,* P1;
MAX = 0,计数= 0,我
而(* P)
{
计数= 0;
而(* p =='')P + +;
(* P!='' && * p)
{/ /我们必须注意的判断* P! = 0来判断,或到最后一个字,它已被添加到背面直到满足空间,所以将超级部门。
P + +;
计数+ +;
}
(MAX <计数)
{
最大计数;
P1 =对数;
}
}
printf的(“人数最多的是:%d条\ n”);,最大
printf的(“最大的一句话是:”);
(* P1 ='' && * P1)/ /这里要判断* P1! ='\ 0',因为结尾的字符串中最长的单词,如果你不判断* P1! ='\ 0',也界。
{
的putchar(* P1);
P1 + +;
}
的putchar('\ n');
}
BR /> / *
在字符串中寻找最长的单词。注:A B.如果在一个循环中循环,以确保不仅在环路B,数组但是行业。
而且里面的数组A,但也是扇区,以确保循环。像上面的例子。现在提供一个更容易理解的例子。
而(* P)
{
而(* P!='' && * p)
{
P + +;
}
}
外循环和内循环的循环条件没有必然的,但对于一个指针数组(如果变量标
访问数组下标减法还要注意),加法和减法应该引起人们的注意,必须确保不流溢。
* /

方法:

/ / VC + + 6.0编译通过。

#包括
包括中
无效的主要()
{
字符STR [] =“我我的学生“;
的char * p = str中,数组[10] [20] = {0};
INT I = 0,J = 0,最大值= 0;
而( * P)
{
而(* p =='')* p + +;
(* P && * p!='')
{
>阵列[I] [J + +] = * p;
P + +;
}
i + +; J = 0;
}
= 0;
最大= strlen的(阵列[I]);
P =阵列[I];
(strlen的(阵列[I]))
{
(最大的strlen(阵列[I]))
{
最大值= strlen的(ARRAY [I]);
P =阵列[I];
} <BR /我+ +;
}
printf的(“%e\ n%s的\ n”,最大,P);
}

/ *
>寻求中最长的单词的字符串(不区分词与词之间包含非字母数字字符),法官的二维数组的形式。
定义了一个两维数组,每个元素都用于存储一个字符串(每个分离的字)。
然后判断的时间最长。

比较第一种方法,这种方法更清楚地了解?一些。但缺点是,你要分配一个二维数组来存储分离
字,占用存储空间。
* /

实现任何十进制将R十六进制数2-16(R)

转换为二进制:
/ / VC + + 6.0编译通过

#包括
包括
无效的主要()
{ />诠释A,B [30],我
scanf的(“%d”,&A);
(i = 0;了!= 0;我+ +)
{
B?[我] = 2%;
= A / 2;
}
( - I I> = 0;我 - )
{
printf的(“%d”,B [I]);
}
的putchar('\ n');
}

/ /二进制的转换,也可以使用位移运算符。一定的数量,如1相的二进制
系统的最低位按位“与”,得到的位移,然后得到的二进制最低位,等等。

转换为八进制:

/ VC + + 6.0编译器。

#包括
#,包括
无效的主要()
{
整数A,B [20]我
scanf的(“%d”,&A);
为(i = 0;了!= 0; i + +)
{
B [我] = 8%;
= A / 8;
}
( - I I> = 0; I - )
{
printf的(“% D“,B [I]);
}
的putchar('\ n');
}

/ *
8转换到那里没有十六进制这么大的麻烦,它并不需要定义一个用于存储
所有的基数十六进制的字符数组,但可以直接输出。同时保存他和十六进制基数。从0到F
* /

转换为16进制:

/ / VC + + 6.0编译通过

stdio.h中>
#,包括
无效的主要()
{
整数A,B [20],我基础= 16;
字符X [16] = {'0','1','2','3','4','5','6','7','8','9','A' ,'B','C','D','E','F'};
scanf的(“%d”,&A);
(i = 0;了! 0; i + +)
{
B [我] =%的基础;
= A /基地;
}
( - ; = 0; I - )/ /开始 - 我
{
诠释J = B [我];
printf的(“%c”的,X [J]); BR />}
printf的(“\ n”);
}

/ *
一般其他十六进制数转换为十进制数更容易,准备乘法公式,我们使用。
十进制数转换为十六进制数,则要使用除法。的想法?这个问题是明确的,应该是
典型的算法来解决这些问题。

它的十进制数转换成二进制数,在除了使用部门,但还带着几分算术。

主要的问题是值得理解这两个词:

B [我] =%的基础;
= A /基地;
我们一般采用两种循环使用,得到一个整数的数字,这也恰好说明我们得到了
整数位的方法,它是一个十进制数转换为十进制数的算法
,是,我们得到一个小数位数字的过程,实际上是寻找他的过程中,转换为十进制
数字(虽然本身无需转换本身的时候,就已经是一个十进制数)。事实可以预计相同
十进制数转换成十六进制数的过程中,这是类似的。

然后在第一个输出的结果,取余数的结果,年底的数字,在低位。

* /

解决方案:

#包括
包括的
>无效的主要()
{
诠释一个[10] = {0,1,2,9,10,5,12,7,8,15};
(INT I = 9;我= 0; I - )
{
(A [I]> = 10)
开关([I])
{
10:printf的(“%c”的,'A');突破;
案例11:printf的(“C”,“B”);
情况下,12:printf(“请%C “,'C');休息;
案例13:printf的(”C“,”D“);
情况下,14:printf的(”%c“的,'E');打破;
情况下,15:printf的(“%c”时,'F');休息;
}
其他
printf的(“%d”的,一个[i]);
}
}

/ *
事实上,二进制的转换算法,我们知道的是,我们希望将其转换成16进制数(如果十六进制) />取余数,剩下的结果存储在一个数组里面四舍五入重新分配给他的,那就是扔掉的其余部分,
相当于外商前面的步骤,然后采取余数,再取整。如此循环,直到0为止。

事实上,上述算法,它提醒我们一个十进制数转换成二进制数计算,是不难理解的,
是相通的。

现在的关键是,如果这些东西都是好的,那就是,其余的被放置在一个数组中,现在要做的,
阵列反向输出就OK了。二进制或八进制,只要它的直接输出,但如果
十六进制,不能的情况下,也就是说,如果一个元素的数组里面是14的话,我不能作为输出/>,则必须输出E,因为E是十六进制内底,但也有相应的十进制数14。
一个二进制或八进制,可以直接输出,因为阵列的数量是0,1(二进制)

(0 .... 8),这些数字的二进制和八进制基地。

所面临的问题在这里是输出一个整数,这个整数满足一定的条件下,输出字
突破,例如:如果该整数等于14'E'字符的输出。

当然,我们可以使用.. else语句,以确定特殊字符的十六进制数,它是唯一的A,B,C,D,E,F 6
以确定是否...否则太麻烦了。当然,我们也可以使用开关来确定这更有组织。代码
更清晰。

当然,这是一个十六进制数,我们可以判断,但如果在现实生活中遇到的问题,这一点
条件或交换机上太麻烦了类似的信件,代码是不直观,但也容易出错。

在这个时候,我们可以定义一个字符数组,分别把字符,我们要输出的对应关系如下:

10 A
11 B BR /> 12?
13e
14 -
15 F
16?
17 H
18我
19 J
>
该数组,把数字,里面的字符数组b数组,一个里面的数字是10,当输入
'A',而不是输出10,等等(见上面的对应)课程我上面的对应关系是连续的,其实
的数字和字符的顺序可能不乱,当然,这取决于实际遇到的问题是什么。
以上,如果...否则以确定它是否会过于繁琐。因此,我们定义了一个字符数组来存储
字符。因此,如何接触数字和字符,如何让一个[i],价值10时,但14失去
'E'输出'A',我们可以定义b数组:
/>字符B [30] = {0};
B [10] ='A';
B [11] ='B';
B [12] ='C'
B [13] ='D';
B [14] ='E';
...
B [19] ='J';

因此,这意味着,当该元素的值一个[i] 10:00输出[10] 11输出[11];这和数字对应
。我们可以使用:

诠释吨= [];
printf的(“%c”时,B [T]),[i]的值,我们输出B [多少]

对于上面的例子中,它可以是:

如果(一个[i]> = 10 &&一个[i] <= 19)/ /对应关系是连续的,可以判断
{
诠释吨= [];
printf的(“%c”时,B [T]);
}
其他
{
printf的(“%d”,一个[i]);/ /如果你不属于特殊字符的定义相应的输出。

}

当然,上面是相应的连续十进制和二进制,八进制,十六进制的转换,是连续的。
相应的连续,即如何做到这一点:

20'A'
25'B'
30'D'
50'G' /> 53“H”
58的'C'
100'Z'
200'W'

以上,没有规律性,和数目,这些去定义一个数组的200个元素,
有点划不来。因此,如果是上面这种情况下,有没有更好的办法。只有在判断语句,当然,如果有超过20
字符的对应关系来确定语句是不恰当的,那么有没有更好的办法。同时进一步探讨......

* /

这是我的测试计算机等级考试主题碰到哦,算法相当,一些书,一些扩展。还是自己严重的哦。 。 。

由于太多的文字提出的第三个问题不上来,哦。 。抱歉。 。 。
追问
初学者!还没学数组!
tdll4050
2012-11-27
知道答主
回答量:25
采纳率:0%
帮助的人:17.1万
展开全部
int main() {
char c;
int letters=0,space=0,digit=0,other=0;
printf("输入一行字符:\n");
while((c=getchar())!='\n')
{//循环输入字符
if (c>='0'&&c<='9') digit++;//统计数字
else if ((c>='a'&&c<='z')||(c>='A'&&c<='Z')) letters++;//统计字母
else if (c==' ')space++;//统计空格
else other++;
}
}
printf("字母数:%d\n空格数:%d\n数字数:%d\n其他字符数:%d\n",letters,space,digit,other);
return 0;
}
追问
我意思是用switch语句有没有简单方法?
追答
switch(c) 时
case +一个具体的值,不能加范围,要是非得用switch,只能像楼主那样穷举了
本回答被提问者和网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
867773467
2012-11-27 · TA获得超过180个赞
知道小有建树答主
回答量:243
采纳率:0%
帮助的人:146万
展开全部
根据ascii码值判断,比如英文字母的值有个范围,直接用if语句判断一下就行,空格这种就更容易判断了,ascii值唯一。。。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
泥凌波Rs
2012-12-03 · TA获得超过1920个赞
知道大有可为答主
回答量:8784
采纳率:0%
帮助的人:2092万
展开全部
#包括
包括
包括中
诠释TIME0,TIME1,TIME2,M1,M2;
浮一
T(INT TIME0,时间1,时间2);
浮动米(持股量M1,浮动平方米);
字符的NewMessage [45];
字符消息[45 “那只敏捷的棕色狐狸跳过了懒惰的狗。”;
诠释的主要(){
(1){
printf的(“敏捷的棕色狐狸跳过了懒惰的狗。 “);
getchar函数();
T(定时器0,TIME1,TIME2);
}
返回0;
}
诠释吨(TIME0 ,诠释时间1,诠释TIME2){
时间1 =时间(NULL);
得到(的NewMessage);
M(M1,M2);
TIME2 =时间(NULL);
TIME0 = TIME2时间1
printf的(“您可以使用%d秒的正确率%.2 f%%\ n”,TIME0 a/44 * 100);
} />浮动持股量持股量M2货币供应量M1,M(){

= 0;
(i = 0;我<44; i + +)
{
(消息[I] ==的NewMessage [I])
A + +;
}
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
morebao598
2012-12-12 · TA获得超过2810个赞
知道大有可为答主
回答量:9076
采纳率:0%
帮助的人:2453万
展开全部
第一个问题:
无效的主要()
{
整数= 0;
INT I = 1;
(i = 1; <= 100; + +)
{
A = A + I;
}

(I <= 100)
{
= A + I;
我+ +;
}

{
A = A + I;
+ +;
}
(I <= 100)

第二个问题,到1-100奇:
= 0;
INT I = 1;
(i = 1; <= 100; i + +)
{
(i%2 == 1)
A = A + ;
}

(I <= 100)
{
(i%2 == 1)
A = A +;
i + +;
}

{
(i%2 == 1)
A = A +;
+ +;
}
而(I <= 100)

第三个冠军1-100
诠释= 0;
INT I = 1;
为(i = 1; <= 100,我+ +)
{
(i%2 == 0) /> A = A + I;
}

(I <= 100)
{
(i%2 == 0)
A = A +;
+ +;
}

{
(i%2 == 0)
A = A +;
+ +;
}
(I <= 100)
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(8)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式