案例可能有多组,每个案例输入为一行字符串。
对每个案例按A-Z的顺序输出其中大写字母出现的次数。
DFJEIWFNQLEF0395823048+_+JDLSFJDLSJFKK
A:0 B:0 C:0 D:3 E:2 F:5 G:0 H:0 I:1 J:4 K:2 L:3 M:0 N:1 O:0 P:0 Q:1 R:0 S:2 T:0 U:0 V:0 W:1 X:0 Y:0 Z:0
import java.util.Scanner; public class Main { public static void main(String[] args) { Scanner scanner = new Scanner(System.in); char[] array = scanner.nextLine().toCharArray(); int[] record = new int[256]; for (char c : array) { record[c]++; } for (int i = 'A'; i <= 'Z'; i++) { System.out.println((char) i+":"+record[i]); } } }
#include<iostream> #include<map> #include<string> using namespace std; int main() { string str; while(cin>>str) { map<char,int> mp; for(int i=0;i<26;i++) { mp[char(int('A')+i)]=0; } for(int i=0;i<str.length();i++) { if(str[i]>='A'&&str[i]<='Z') mp[str[i]]++; } for(auto it=mp.begin();it!=mp.end();it++) { cout<<it->first<<":"<<it->second<<endl; } } return 0; }mp要记得先进行正确的初始化。
#include<iostream> #include<map> using namespace std; int main() { string s; cin >> s; map<char, int> m; for(int i=0; i<s.length(); i++) m[s[i]]++; for(char i='A'; i<='Z'; i++) cout << i << ":" << m[i] << endl; return 0; }
#include <iostream> #include <cstdio> #include <string> #include <cstring> using namespace std; int number[26]; //标记数组 int main(){ string str; while (getline(cin, str)) { memset(number, 0, sizeof(number)); for (int i = 0; i < str.size(); ++i) { if ('A' <= str[i] && str[i] <= 'Z') { number[str[i] - 'A']++; } } for (int j = 0; j < 26; ++j) { printf("%c:%d\n", 'A' + j, number[j]); } } return 0; }
#include<iostream> #include<string> #include<cstring> using namespace std; int main(){ string str; while(getline(cin,str)){ char ch[100]; int count[26]; for(int i=0;i<26;i++) count[i]=0; strcpy(ch,str.c_str()); for(int i=0;i<strlen(ch);i++){ if(ch[i]>='A'&&ch[i]<='Z') count[ch[i]-'A']++; } for(int i=0;i<26;i++){ cout<<(char)('A'+i)<<":"<<count[i]<<endl; } } }
#include <stdio.h> #include <string.h> #define N 3000 int main() { char str[N]; int count[26]; while(gets(str)) { int len=strlen(str); for(int i=0; i<26; i++) { count[i]=0; } for(int i=0; i<len; i++) { if('A'<=str[i]&&str[i]<='Z') { count[str[i]-'A']++; } } for(int i=0; i<26; i++) { printf("%c:%d\n", 'A'+i, count[i]); } } return 0; }
#include <stdio.h> #include <math.h> #include <stdlib.h> #include <iostream> #include <cstdio> #include <algorithm> #include <cstring> using namespace std; struct Zimu{ char a; int count; }; Zimu zm[26]; //统计字母个数 int main(){ string str; while (getline(cin, str)){ //赋初值 for (int i = 0; i < 26; i++){ zm[i].a = 'A' + i; zm[i].count = 0; } //如果属于A~Z,则对应count++ for (int i = 0; i < str.length(); i++) { if (str[i] - 'A' >= 0 && 'Z' - str[i] >= 0) { int n = str[i] - 'A'; zm[n].count++; } } for (int i = 0; i < 26; i++){ cout << zm[i].a << ":" << zm[i].count << endl; } } return 0; }
#include <iostream> #include <string> using namespace std; int main() { string str; getline(cin,str); int count[26] = {0}; for(int i = 0; i < str.size(); ++i){ if(str[i]>='A' && str[i]<='Z'){ count[str[i]-'A']++; } } for(int i = 0; i < 26; ++i){ printf("%c:%d\n",'A'+i,count[i]); } return 0; }
看到 题解里 创建一个128大小的数组,利用ASCLL码的特性,遍历读来的字符串,然后再输出数组里A 到 Z的部分就可以了
题解方法很好,应该积累
我用的是map,这样时间复杂度也会很低, n的时间复杂度
不建议用双重循环,n2复杂度
#include <iostream> #include "string" #include "cstdio" #include "map" using namespace std; int main() { string str; map<char, int> numbers; for (char c = 'A'; c <= 'Z'; c++) { numbers.insert(pair<char, int> {c, 0}); } while (cin >> str) { for (int i = 0; i < str.length(); i++) { numbers[str[i]]++; } for (char c = 'A'; c <= 'Z'; c++) { printf("%c:%d\n", c, numbers[c]); } } return 0; }
#include <stdio.h> int main(){ char s[1000]; int a[26] = {0}; scanf("%s", s); for (int i = 0; s[i]!='\0'; i ++) { if (s[i] >= 'A' && s[i] <= 'Z') { a[s[i]-'A'] ++; } } for (int i = 0; i < 26; i ++) { printf("%c:%d\n", 'A'+i, a[i]); } return 0; }