您的位置:首页 > 其它

B1021 字符串输入输出

2020-03-28 20:02 106 查看

题目描述
1021. 个位数统计 (15)
给定一个k位整数N = dk-110k-1 + … + d1101 + d0 (0<=di<=9, i=0,…,k-1, dk-1>0),请编写程序统计每种不同的个位数字出现的次数。例如:
给定N = 100311,则有2个0,3个1,和1个3。
输入格式:
每个输入包含1个测试用例,即一个不超过1000位的正整数N。
输出格式:
对N中每一种不同的个位数字,以D:M的格式在一行中输出该位数字D及其在N中出现的次数M。
要求按D的升序输出。
输入样例:
100311
输出样例:
0:2
1:3
3:1

错误代码

#include<cstdio>
int main(){             //题目要求1000位整数 用int型(10的9次方以内可用不行
int a[10] = {0};
int N, i;
scanf("%d", &N);
while(N){
i = N % 10;
a[i]++ ;
N = N / 10;
}
for(int j = 0; j < 10; j++){
if(a[j] != 0){
printf("%d:%d\n", j, a[j]);
}
}
return 0;
}

错误原因
0.未注意题目要求 1000位的整数 int型只能存储10的9次方以内的数字。因此只能用字符串来存储。

AC代码

#include<iostream>
#include<string>
using namespace std;int main(){             //题目要求1000位整数 用int型(10的9次方以内可用不行
int a[10] = {0};
string str;
cin >> str;        //字符串的输入
for(int i = 0; i < str.length(); i++)
a[str[i] - '0']++;
for(int j = 0; j < 10; j++){
if(a[j] != 0){
printf("%d:%d\n", j, a[j]);
}
}
return 0;
}

知识点
0.最基本的 利用string需要改变头文件 写上

#include<string>
using namespace std;

1.字符串额输入输出问题
我开始利用的

scanf("%s", str);
编译未通过。
一般情况下,对已存放好的字符串进行访问直接利用
printf("%c", str[i])
是没问题的。
但若要输入或输出整个字符串,则只能利用cin count (在iostream头文件中,因此需要更改一下头文件
#include<iostream

硬要利用scanf和printf的话,可以用c_str()将string类型数组转换为字符数组进行输出。即
printf("%s", str.c_str() );

以后记得整个字符串的输入输出直接用cin count即可。

2.取字符串数组某一位的数字:

str[i] - '0'

  • 点赞
  • 收藏
  • 分享
  • 文章举报
Jack Pearson 发布了9 篇原创文章 · 获赞 0 · 访问量 266 私信 关注
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: