零起点学算法101——统计字母数字等个数

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了零起点学算法101——统计字母数字等个数相关的知识,希望对你有一定的参考价值。

Description

输入一串字符,统计这串字符里的字母个数,数字个数,空格字数以及其他字符(最多不超过100个字符)

Input

多组测试数据,每行一组

Output

每组输出一行,分别是字母个数,数字个数,空格字数以及其他字符个数

Sample Input
I am a student in class 1.
I think I can!

Sample Output
18 1 6 1
10 0 3 1

我的答案
#include<stdio.h>

int main()

char str[100];
int i,a,b,c,d;
while(gets(str)!=NULL)

a=b=c=d=0;
for(i=0;str[i]!='\0';i++)

if(str[i]>='a'&&str[i]<='z'||str[i]>='A'&&str[i]<='z')
a++;
else if(str[i]>='0'&&str[i]<='9')
b++;
else if(str[i]==' ')
c++;
else
d++;

printf("%d %d %d %d\n",a,b,c,d);


return 0;


为什么交上去是run time ???

参考技术A 没有打using namespace std;
#include<stdio.h>
using namespace std;
int main()

char str[100];
int i,a,b,c,d;
while(gets(str)!=NULL)

a=b=c=d=0;
for(i=0;str[i]!='\0';i++)

if(str[i]>='a'&&str[i]<='z'||str[i]>='A'&&str[i]<='z')
a++;
else if(str[i]>='0'&&str[i]<='9')
b++;
else if(str[i]==' ')
c++;
else
d++;

printf("%d %d %d %d\n",a,b,c,d);


return 0;
追问

还是不对
。。。

追答

是不是run time error 评测截图看下

追问

追答

把str[100]改成str[100000]

追问

过了!谢谢啊~为什么啊?

追答

因为数组越界,数据可能是这样的
yusdfgysdgfgdsuifgisdugfuidsguifdshfiudshfiuhsduifsiufhusdihfuidyusdfgysdgfgdsuifgisdugfuidsguifdshfiudshfiuhsduifsiufhusdihfuidyusdfgysdgfgdsuifgisdugfuidsguifdshfiudshfiuhsduifsiufhusdihfuidyusdfgysdgfgdsuifgisdugfuidsguifdshfiudshfiuhsduifsiufhusdihfuidyusdfgysdgfgdsuifgisdugfuidsguifdshfiudshfiuhsduifsiufhusdihfuidyusdfgysdgfgdsuifgisdugfuidsguifdshfiudshfiuhsduifsiufhusdihfuidyusdfgysdgfgdsuifgisdugfuidsguifdshfiudshfiuhsduifsiufhusdihfuidyusdfgysdgfgdsuifgisdugfuidsguifdshfiudshfiuhsduifsiufhusdihfuidyusdfgysdgfgdsuifgisdugfuidsguifdshfiudshfiuhsduifsiufhusdihfuid

追问

为什么会越界啊?,,,我是新手啊。。简单点说呗~~~

追答

你就开了100的数组,有更多的输入,数组就爆掉了

本回答被提问者采纳

1146: 零起点学算法53——数组中插入一个数

1146: 零起点学算法53——数组中插入一个数

Time Limit: 1 Sec  Memory Limit: 64 MB   64bit IO Format: %lld
Submitted: 1749  Accepted: 613
[Submit][Status][Web Board]

Description

给定有序数组(从小到大),再给你一个数,要求插入该数到数组中并保持顺序

 

Input

多组测试,每组第一行输入一个整数n,然后是n个有序的整数
第二行输入1个整数m和1个整数K

 

Output

将整数m插入到原数组中保持顺序是升序,然后输出2行
第一行是插入以后的数组
第二行是插入以后的数组中下标值是K的数

n m k不超过20

 

Sample Input 技术分享

 
3 1 2 5
3 1

 

Sample Output

1 2 3 5
2

 

Source

 
 1 #include<stdio.h>
 2 int main(){
 3     int n,a[50],b[50];
 4     while(scanf("%d",&n)!=EOF){
 5         for(int i=0;i<n;i++){
 6             scanf("%d",&a[i]);
 7         }
 8         
 9         int m,k,j=0;
10         scanf("%d%d",&m,&k);
11         for(int i=0;i<n;i++){
12             if(a[i]<m){
13                 b[j]=a[i];
14                 j++;
15             }
16             else break;
17         }
18         b[j]=m;
19         j++;
20         for(int i=j-1;i<n;i++){
21             b[j]=a[i];
22             j++;
23         }
24         
25         for(int i=0;i<j-1;i++){
26             printf("%d ",b[i]);
27         }
28         printf("%d\n",b[j-1]);
29         printf("%d\n",b[k]);
30     }
31     return 0;
32 }

 








以上是关于零起点学算法101——统计字母数字等个数的主要内容,如果未能解决你的问题,请参考以下文章

零起点学算法83——数组中删数

零起点学算法101——手机短号

1165: 零起点学算法72——首字母变大写

1110: 零起点学算法17——比较2个数大小

1146: 零起点学算法53——数组中插入一个数

Problem K: 零起点学算法107——统计元音