c语言题,急需答案!

来源:百度知道 编辑:UC知道 时间:2021/06/14 05:09:13
输入一行字符,分别统计出其中英文字母、空格、数字和其他字符的个数。(是老谭的c程序设计第三版第129页第2题)有高分,3日之内答出正确答案再加分。
用while或do while回答。谢谢,本人新手,简单点!

很简单的,用一个字符数组一一判断就可以了.
#include<stdio.h>
void main()
{
int i=0,chars=0,nums=0,spaces=0,others=0;
char a[50];/*用来接收输入的字符串*/
printf("请输入一行字符:\n");
gets(a);
while(a[i]!='\0')
{
if ((a[i]>='A' && a[i]<='Z') || (a[i]>='a' && a[i]<='z')) /*字符*/
chars++;
else if (a[i]>='0' && a[i]<='9') /*数字*/
nums++;
else if (a[i]==' ') /*空格*/
spaces++;
else
others++;
i++;
}
printf("共有英文字母%d个,数字%d个,空格%d个,其它字符%d个.\n",chars,nums,spaces,others);
}
在VC6.0下调试通过.

#include <stdio.h>
void main()
{
char new[];
int i,x=0,y=0,z=0,o=0; /**x为英文字符数y为空格字符数z数字个数,o其他字符树***/
printf("输入一个文本\n");
scanf("%s",new);
for(i=0;new[i];i++)
{
if(new[i]>='1'&&new[i]<='9')
z++;
else if((new[i]>='a'&&new[i]<='z')||(new[i]>='A'&&new[i]<='Z'))
x++;
else if(new[i]==' ')
y++;
else o++;
}
printf("英文个数%d\n",x);
printf("数字个数%d\n",z);
printf("空格个数%d\n",y);
printf("其他字符个数%d\n",o);
}

这个不是很难吧?用一个for循环,挨个判断:
用_istdigit[int isdigit(int c);int iswdigit(wint_t c);]判断是否是数字0-9;不需要区分十六进制数吧?
用_istalpha[int isalpha(int c);int iswalpha(wint_t c);]判断是否为英文字母;
用_istspace[int isspace(int c);int iswspace(wint_t c);]判断是否为空格,制表符,换行符等,若只判断空格,则用_T(" ")直接比较算了。
剩下的不就是其他字符了吗?
呵呵

判断一下字符的ASC码就行了...
下表列出了字符集中的 0 - 127。

代码 字符 代码 字符 代码 字符 代码 字符
0 32 [空格] 64 @ 96 `
1 33 ! 65 A 97 a
2 34 " 66 B 98 b
3 35 # 67 C 99 c
4 36 $ 68 D 100 d
5 37 % 69 E 101 e
6 38 & 70 F 102 f
7 39 ' 71 G 103 g
8 ** 40 ( 72 H 104 h
9 ** 41 ) 73 I 105 i
10 ** 42 * 74 J 106 j
11 43 + 75 K 107 k
12 44 , 76 L 108 l
13 ** 45 - 77 M 109 m
14 46 . 78 N 110 n
15  47 / 79 O 111 o
16  48 0 80 P 112 p
17  49 1 81 Q 113 q
18  50 2 82 R 114 r
19  51 3 83 S 115 s
20  52 4 84 T 116 t
21  53 5 85 U 117 u
22  54 6 86 V 118 v
23  55 7 87 W 119 w
24  56 8 88 X 120 x
25  57 9 89 Y 121 y
26  58 : 90 Z 122 z
27  59 ; 91 [ 123 {
28  60 < 92 \ 124 |
29  61 = 93 ] 125 }
30 - 62 > 94 ^ 126 ~
31 63 ? 95 _ 127 

** 数值 8、9、10 和 13 可以分别转换为退格符、制表符、换行符和回车符。这些字符都没有图形表示,但是对于不同的应用程序,这些字符可能会影响文本的显示效果。

 表示在当前平台上不支持的字符。

下表列出了字符集中的 128 - 255。

代码 字符 代码 字符 代码 字符 代码 字符
128 € 160 [空格] 192 À 224 à
129  161 ¡ 193 Á 225 á
130 ‚ 162 ¢ 194 Â 226 â
131 ƒ 163 £ 195 Ã 227 ã
132 „ 164 ¤ 196 Ä 228 ä
133 … 165 ¥ 197 Å 229 å
134 † 166 ¦ 198 Æ 230 æ
135 ‡ 167 § 199 Ç 231 ç
136 ˆ 168 ¨ 200 È 231 ç
137 ‰ 169 © 201 É 232 è
138 Š 170 ª 202 Ê 233 é
139 ‹ 171 « 203 Ë 234 ê
140 Œ 172 ¬ 204 Ì 235 ë
141  173 ­ 205 Í 236 ì
142 Ž 174 ® 206 Î 237 í
143  175 ¯ 207 Ï 238 î
144  176 ° 208 Ð 239 ï
145 ‘ 177 ± 209 Ñ 240 ð
146 ’ 178 ² 210 Ò 241 ñ
147 “ 179 ³ 211 Ó 242 ò
148 ” 180 ´ 212 Ô 243 ó
149 • 181 µ 213 Õ 244 ô
150 – 182 ¶ 214 Ö 245 õ
151 — 183 · 215 × 246 ö
152 ˜ 184 ¸ 216 Ø 247 ÷
153 ™ 185 ¹ 217 Ù 248 ø
154 š 186 º 218 Ú 249 ù
155 › 187 » 219 Û 250 ú
156 œ 188 ¼ 220 Ü 251 û
157  189 ½ 221 Ý 252 ü
158 ž 190 ¾ 222 Þ 253 ý
159 Ÿ 191 ¿ 223 ß 254 þ

 表示在当前平台下不支持。

nt main()
{
int charcount = 0, chinesecount = 0, numcount = 0, spacecount = 0, othercount = 0, totalcount;
cout<<"请输入一行字符:";
char pstr[] = "1 a ,,,我 朥你", curchar;
// cin>>pstr;
curchar = pstr[0];
int curindex = 1;
while(curchar != '\0')
{
if (curchar >= 65 && curchar <= 122) //A-z
charcount++;
else if (curchar >= 128 || curchar < 0) //中文
chinesecount++, curindex++; //中文字符占两个字节,因此将游标向后移一位
else if (curchar >= 48 && curchar <= 57) //0-9
numcount++;
else if (curchar == 32) //空格
spacecount++;
else
othercount++;
curchar = pstr[curindex++];
}

totalcount = charcount + chinesecount + numcount + spacecount + othercount;
cout<<"总数:"<<totalcount<<" 英文字符:"<<charcount<<" 中文字符"<<chinesecount
<<" 数字:"<<numcount<<" 空格:"<<spacecount<<" 其它:"<<othercount;
}
//我转载的

这里有现成的答案:
http://hanlin.hbu.cn/personal/gbz/xiti.htm