25 条题解

  • 25
    @ 2022-8-16 16:44:26

    经过百般尝试,我才发现我的 ASCII码搞错了!心态崩溃,好了,看看思路吧!

    1. 首先建立变量 letter[26] 存储每一个字母出现的次数,顺序是从 a~z,并且每个值都设置为零
    2. memset函数格式:memset(变量名,每个元素的值,sizeof(变量名));
    3. 用数组 a 存储输入的字符,用 little 存储 26个字母
    4. 可以老样子,用 cin.getline(变量名,截取长度,结束符号);
    5. 然后开始漫长的遍历数组的旅程
    6. 外层:遍历 26个字母出现的次数
    7. 内层:遍历数组 a 中的字符是否是遍历的字符,如果是,那么将次数加一
    8. 最后就是输出结果啦
    9. 第一行:遍历数组 letter,如果有出现过(!=0)那么输出这个字符
    10. 第二行:遍历数组 letter,如果有出现过(!=0)那输出出现的次数

    呼,终于讲完了,那废话少说,上代码吧!(UP AC过,请放心食用)

    #include <bits/stdc++.h>
    using namespace std;
    int main()
    {
        int letter[26];
        memset(letter, 0, sizeof(letter));
    	char a[300], little[26] = {'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z'};
        cin.getline(a, 300, '.');
        for (int i = 0; i < 26; i++)
        {
            for (int j = 0; j < strlen(a); j++)
            {
                if (a[j] == i + 97) letter[i] += 1;
            }
        }
        for (int i = 0; i < 26; i++) if (letter[i] != 0) cout << little[i];
        cout << endl;
        for (int i = 0; i < 26; i++) if (letter[i] != 0) cout << letter[i];
    	return 0;
    }
    
    • @ 2022-9-12 13:58:09

      UP,终于“将”完了?

    • @ 2023-8-12 18:19:16

      @ 已修改(尬)

    • @ 2023-11-12 14:53:07

      为啥我Time Exceeded了?

    • @ 2023-12-5 21:13:24
      #include<bits/stdc++.h>
      using namespace std;
      char s[999];
      int  a[9999];
      int main() {
      	scanf("%s", s + 1);
      	int l = strlen(s + 1);
      	for(int i=1;i<=l-1;i++){
      		++a[s[i]-'a'+1];
      		
      	}
      	sort(s + 1, s + l);
      	for(int i=1;i<=26;i++){
      		if(a[i]>0)
      			printf("%c",i-1+'a');
      	}
      	cout<<endl;
      	for(int i=1;i<=26;i++){
      		if(a[i]>0){
      			cout<<a[i];
      		}
      	}
      	return 0;
      }
      

      👎 👎 👎 我这多好,不用那么麻烦👎 👎 👎

    • @ 2024-3-31 16:03:42

      @ 😄 😄 😄 我这多好,不用那么麻烦😄 😄 😄

      //全宇宙最牛
      #include<iostream>
      using namespace std;int a[26],c;int main(){string b;cin>>b;for(c=0;c<b.length()-1;c++){a[b[c]-97]++;}for(c=0;c<26;c++){if(a[c]!=0)cout<<char(c+97);}cout<<endl;for(c=0;c<26;c++)if(a[c]!=0)cout<<a[c];}
      
    • @ 2024-4-14 19:28:26

      @👍 👍 👍

  • 6
    @ 2022-4-28 20:55:06

    使用带含义的数组, 建立一个数组num[27],a代表1,b代表2……z代表26.

    输入字符串以后,遍历字符串

    不需要写27个if

    直接 num[s[i]a+1]++;num[s[i]-'a'+1]++;

    s[i]a+1s[i]-'a'+1,就会把对应的字符转成我们需要的数字。

    然后输出num数组的时候,num[i]>0num[i]>0在输出

    
    cin >> s;
    for (int i = 0; i < s.length() - 1; i++)
    {
        num[s[i] - 'a' + 1]++;
    }
    for (int i = 1; i <= 26; i++)
    {
        if (num[i] > 0)
        {
            char x = i + 'a' - 1;
            cout << x;
        }
    }
    cout << endl;
    for (int i = 1; i <= 26; i++)
    {
        if (num[i] > 0)
        {
            cout << num[i];
        }
    }
    
    
    
    • 5
      @ 2024-1-14 15:21:36
      #include<iostream>
      using namespace std;
      int a[100];//定义一个存储字母出现次数的数组
      int main()
      {
          int x;
          char b=' ';
          cin>>b;
          while (b!='.')//这个循环用来输入和统计
          {
              x=b-'a'+1;
              a[x]++;
              cin>>b;
          }
          for(int i=1;i<=30;i++)//输出第一行
          {
              if(!(a[i]==0))
              {
                  b=i+'a'-1;
                  cout<<b;
              }
          }
          cout<<endl;//不要忘记换行
          for(int i=1;i<=30;i++)//输出第二行
          {
              if(!(a[i]==0))
              {
                  cout<<a[i];
              }
          }
          return 0;
      }//制作不易,求点赞o( ̄▽ ̄)d
      
      • 5
        @ 2022-9-11 14:11:24
        1. 首先建立 数组 a 存储每一个字母出现的次数,顺序是从 a~z,并且每个值都设置为零.
        2. 用 letter 存储输入的字符,用 数组 a 存储 26个字母.
        3. 然后开始循环输入字母到 n 中.
        4. 然后开始漫长的遍历数组的旅程:
        5. 外层:遍历 26个字母出现的次数.
        6. 内层:遍历数组 a 中的字符是否是遍历的字符,如果是,那么将次数加一.
        7. 最后就是输出结果啦:
        8. 第一行:遍历字符串 letter,如果有出现过(!=0)那么输出这个字符.
        9. 第二行:遍历字符串 a ,如果有出现过(!=0)那输出出现的次数.

        AC过,请放心食用

        #include <iostream>
        using namespace std;
        void aaa(string n)
        {
            int a[26];
            string letter = "abcdefghijklmnopqrstuvwxyz";
            for (int i = 0; i < 26; i++)
            {
                a[i] = 0;
            }
            for (int i = 0; i < n.length(); i++)
            {
                for (int j = 0; j < 26; j++)
                {
                    if (n[i] == letter[j])
                    {
                        a[j]++;
                    }
                }
            }
            for (int i = 0; i < 26; i++)
            {
                if (a[i] != 0)
                {
                    cout << letter[i];
                }
            }
            cout << endl;
            for (int i = 0; i < 26; i++)
            {
                if (a[i] != 0)
                {
                    cout << a[i];
                }
            }
        }
        int main()
        {
            string n;
            cin >> n;
            aaa(n);
            return 0;
        }
        
        • @ 2023-4-5 8:29:40

          缝合大师

        • @ 2023-8-23 9:20:30

          UP不知道全局变量么

        • @ 2024-1-25 17:08:44

          up主,您的主页是认真的么?(尴尬而又不失礼貌的微笑)

        • @ 2024-5-19 15:12:51

          是北京大学的? 🤢

      • 2
        @ 2023-12-9 17:14:22

        考察了对数组与字符串的应用

        好像超了点纲

        输入 如何点到即止? 那怎样正确输出?
        cin getline 不废
        ... 仔细想一想

        啊哈!先输入,后记录,再判断!

        写出来了!!!

        #include <bits/stdc++.h>
        using namespace std;
        int a[26];//自动初始化
        int main(){
            string s;
            string n="abcdefghijklmnopqrstuvwxyz";//26个字母
            getline(cin,s,'.');//读到‘.’终止,避免RE
            for (long long i=0;i<s.size();i++){//遍历
                if (!(s[i]>='a' and s[i]<='z')){//判断是否为小写字母
                    s.erase(s[i]);//删除(尽管没太大用)
                }
            }
            for (int i=0;i<s.size();i++){//从头到尾遍历一遍
                for (int j=0;j<26;j++){  
                    if (s[i]==n[j]){//判断s中包函几个不同的几个字母
                        a[j]++;
                    }
                }
            }
            for (int j=0;j<26;j++){
                if (a[j]==0){//判断该字符出现过几次
                    cout<<"";//如果没有,输出空
                }
                else cout<<n[j];//否则输出该字符
            }
            cout<<endl;//注意换行
            for (int j=0;j<26;j++){
                if (a[j]!=0){//仍然判断
                    cout<<a[j];//输出次数
                }
                else cout<<"";
            }
            return 0;//好习惯
        }
        
        • 1
          @ 2024-3-31 16:00:01

          //全宇宙最牛
          #include<iostream>
          using namespace std;int a[26],c;int main(){string b;cin>>b;for(c=0;c<b.length()-1;c++){a[b[c]-97]++;}for(c=0;c<26;c++){if(a[c]!=0)cout<<char(c+97);}cout<<endl;for(c=0;c<26;c++)if(a[c]!=0)cout<<a[c];}
          

          • 1
            @ 2023-12-23 16:18:27
            #include<iostream>
            using namespace std;
            int main(){
                string p;
                cin>>p;
                short u[26]={0};
                for(int i=0;i<(int)p.length()-1;i++)u[p[i]-'a']++;
                for(int i=0;i<26;i++)if(u[i]!=0)cout<<char(i+'a');
                cout<<endl;
                for(int i=0;i<26;i++)if(u[i]!=0)cout<<u[i];
                return 0;
            }
            
            • 1
              @ 2023-12-3 19:22:18
              #include<bits/stdc++.h>
              using namespace std;
              map<char,int>a;//map数组,用于char或者string等类型数组的桶标记
              char s;
              int main(){
                for(int i=0;;i++){
                  cin>>s;
                  if(s!='.')
                  a[s]+=1;
                  else if(s=='.')
                  break;
                }//用于判断什么时候结束输入
                for(char i='a';i<='z';i++){
                  if(a[i]>0)
                  cout<<i;
                }
                cout<<endl;
                for(char i='a';i<='z';i++){
                  if(a[i]>0)
                  cout<<a[i];
                }//for循环里面不仅局限于int类型的计数
                return 0;
              }
              
              • 1
                @ 2023-8-24 16:15:11

                过辣!(不枉我写了10分钟)

                初始版本:

                #include <bits/stdc++.h>
                using namespace std;
                int num[26];
                int main(){
                    string s,a="__________________________";//字符串变量a为26个_
                    cin>>s;
                    for (int i=0;i<(int)s.length()-1;i++)
                    {
                        int t=s[i]-97;
                        a[t]=s[i];
                        //'a'的值是97
                        num[t]++;
                    }
                    for (int i=0;i<26;i++)
                    {
                        if (a[i]!='_')
                        {
                            cout<<a[i];
                        }
                    }
                    cout<<endl;
                    for (int i=0;i<26;i++)
                    {
                        if (num[i]!=0)
                        {
                            cout<<num[i];
                        }
                    }
                    return 0;
                }
                

                稍微优化了一下:

                #include <bits/stdc++.h>
                using namespace std;
                int num[26];//初始化0
                int main()
                {
                    string s;
                    cin>>s;
                    for (int i=0;i<(int)s.length()-1;i++)
                    {
                        //'a'的值是97
                        num[s[i]-97]++;
                    }
                    for (int i=0;i<26;i++)
                    {
                        if (num[i]!=0)
                        {
                            char a=i+97;
                            cout<<a;
                        }
                    }
                    cout<<endl;
                    for (int i=0;i<26;i++)
                    {
                        if (num[i]!=0)
                        {
                            cout<<num[i];
                        }
                    }
                    return 0;
                }
                
                • @ 2024-3-31 16:06:55

                  过辣!(不狂我写了五分钟)

                  #include<iostream>
                  using namespace std;int a[26],c;int main(){string b;cin>>b;for(c=0;c<b.length()-1;c++){a[b[c]-97]++;}for(c=0;c<26;c++){if(a[c]!=0)cout<<char(c+97);}cout<<endl;for(c=0;c<26;c++)if(a[c]!=0)cout<<a[c];}
                  

              • 1
                @ 2023-4-1 21:36:56

                感觉这样比较简洁

                #include <bits/stdc++.h> 
                using namespace std;
                int num[27];
                int main()
                {
                    string s;
                    cin >> s;
                    for (int i = 0; i < s.length() - 1; i++)
                    {
                        num[s[i] - 'a' + 1]++;
                    }
                    for (int i = 1; i <= 26; i++)
                    {
                        if (num[i] > 0)
                        {
                            char x = i + 'a' - 1;
                            cout << x;
                        }
                    }
                    cout << endl;
                    for (int i = 1; i <= 26; i++)
                    {
                        if (num[i] > 0)
                        {
                            cout << num[i];
                        }
                    }
                
                
                
                
                
                
                     
                    return 0;
                }
                
              • 0
                @ 2024-5-27 19:11:26

                奎若大佬竟然发了这么“好”的代码?这题用数组字典就行了呀!代码我就不放了,免得被抄

                • 0
                  @ 2024-3-3 10:54:59

                  已AC,请放心食用

                  #include <bits/stdc++.h>
                  using namespace std;
                  int main(int argc,char *argv[])
                  {
                      char a[100];
                      int c[26]={0};
                      cin>>a;
                      for(int i=0;a[i]!='.';i++)
                      {
                          c[a[i]-'a']+=1;
                      }
                      for(int i=0;i<26;i++)
                      {
                          if(c[i]!=0)
                          {
                              cout<<(char)(i+97);
                          }
                      }
                      cout<<endl;
                      for(int i=0;i<26;i++)
                      {
                          if(c[i]!=0)
                          {
                              cout<<c[i];
                          }
                      }
                      return 0;
                  }
                  
                  • 0
                    @ 2024-2-25 15:52:24
                    #include <bits/stdc++.h>
                    using namespace std;
                    int main()
                    {
                        int letter[26];
                        memset(letter, 0, sizeof(letter));
                    	char a[300], little[26] = {'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z'};
                        cin.getline(a, 300, '.');
                        for (int i = 0; i < 26; i++)
                        {
                            for (int j = 0; j < strlen(a); j++)
                            {
                                if (a[j] == i + 97) letter[i] += 1;
                            }
                        }
                        for (int i = 0; i < 26; i++) if (letter[i] != 0) cout << little[i];
                        cout << endl;
                        for (int i = 0; i < 26; i++) if (letter[i] != 0) cout << letter[i];
                    	return 0;
                    }
                    
                    
                    • 0
                      @ 2023-8-11 20:14:10
                      #include<bits/stdc++.h>
                      using namespace std;
                      int main()
                      {
                          int letter[26];
                          memset(letter,0,sizeof(letter));
                      	char a[300],little[26]={'a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z'};
                          cin.getline(a, 300, '.');
                          for(int i=0;i<26;i++)
                          {
                              for (int j = 0; j < strlen(a); j++)
                              {
                                  if (a[j] == i + 97) letter[i] += 1;
                              }
                          }
                          for (int i = 0; i < 26; i++) if (letter[i] != 0) cout << little[i];
                          cout << endl;
                          for (int i = 0; i < 26; i++) if (letter[i] != 0) cout << letter[i];
                      	return 0;
                      }
                      
                      • 0
                        @ 2023-8-7 22:16:58

                        创建数组,记录后再输出。

                        #include <iostream>
                        using namespace std;
                        int main()
                        {
                            string s;
                            int a[26]={},i=0;
                            cin>>s;
                            while (s[i]!='.')
                            {
                                if (s[i]>='a' && s[i]<='z') a[int(s[i])-97]++;
                                i++;
                            }
                            for (int i=0;i<26;i++)
                            {
                                if (a[i]>0) cout<<char(i+97);
                            }
                            cout<<endl;
                            for (int i=0;i<26;i++)
                            {
                                if (a[i]>0) cout<<a[i];
                            }
                            return 0;
                        }
                        
                        • 0
                          @ 2023-7-24 19:13:17

                          利用ASCLL码,实现数字与字符之间的转换。

                          这道题目有两个值得思考的地方。

                          1. 数字与字符如何转换?
                          2. 如何实现字符输出一行,第二行数字对应?

                          (1)数字与字符转换的方法。

                          1. 字符转数字:如果我们把一个char型字符=int型数字,那么int变量中储存的将是char型字符对应的ASCLL码。
                          2. 数字转字符:其实就是上面的逆运用,反过来即可。

                          (2)的话,你看完代码就当你明白了。


                          AC代码

                              int a[130]={0},zhuan2;//数组下标对应ASCLL码。
                              string n,dz="",ds="";
                              cin>>n;
                              char zhuan;
                              int sum=n.length()-1;//保存字符串长度(注:最后的点不能算进去要-1)。
                              for (int i=0;i<sum;i++)
                              {
                                  zhuan2=n[i];//因为zhuan2是int型变量,n[i]是char型变量,zhuan2会储存n[i]的ASCLL码值。
                                  a[zhuan2]++;//对应的数组+1。
                              }
                              for (int i=0;i<=122;i++)//判断ASCLL中不为零的数有哪些。
                              {
                                  if (a[i]!=0)
                                  {
                                      zhuan=i;//把数字转换为字符。
                                      dz+=zhuan;//把字符加入字符串中,实现第一行为对应字符的效果(问题二解决)。
                                  }
                              }
                              cout<<dz<<endl;//输出第一行
                              for (int i=0;i<=122;i++)//判断ASCLL中不为零的数有哪些。
                              {
                                  if (a[i]!=0)
                                  {
                                      cout<<a[i];//不为零就输出数字(ASCLL码对应字符出现次数)。
                                  }
                              }//程序结束
                          
                          • 0
                            @ 2023-7-22 14:41:16
                            #include <bits/stdc++.h>
                            using namespace std;
                            int x,f[30];
                            string s;
                            int main(){
                                cin>>s;
                                for(int i=0;s[i]!='.';i++){
                                    x=s[i]-'a',f[x]++;
                                }
                                for(int i=0;i<26;i++)if(f[i]!=0)cout<<char(i+97);
                                cout<<endl;
                                for(int i=0;i<26;i++)if(f[i]!=0)cout<<f[i];
                                cout<<endl;
                                return 0;
                            }
                            
                            • 0
                              @ 2023-6-1 11:35:58

                              #include <bits/stdc++.h> using namespace std; int main() { string s; char x='a'; int a[26];//这是统计小写字母出现个数的数组 char b[26];//a~z; cin >>s; for (int i=0;i<26;i++)//初始化数组b; { b[i]=x; x+=1; } for (int i=0;i<26;i++)//初始化数组a; { a[i]=0; } for (int i=0;i<s.length()-1;i++) { a[s[i]-'a']++; } for (int i=0;i<26;i++) { if (a[i]!=0) { cout <<b[i]; } } cout <<endl; for (int i=0;i<26;i++) { if (a[i]!=0) { cout <<a[i]; } } return 0; }

                              • 0
                                @ 2023-4-6 17:07:09

                                直接使用计数排序的思想即可。 注意最后输出每个字符的个数的时候因为前面用的是char类型数组计数,a[i]需要在减去'0'之后加上'0'的ASCII码值48即可转换.

                                #include<bits/stdc++.h>
                                using namespace std;
                                char  a[30];
                                int main()
                                {  char x; 
                                
                                   while(cin>>x &&x!='.') 
                                   		a[x]++;
                                   for(char i='a';i<='z';i++){
                                   		if (a[i]>0) cout<<i;
                                   	}
                                   	cout<<endl;
                                    for(char i='a';i<='z';i++){
                                   		if (a[i]>0)  cout<<a[i]-'0'+48;
                                	}
                                    return 0;
                                }
                                
                                • -2
                                  @ 2024-3-10 20:04:34
                                  #include <bits/stdc++.h>
                                  using namespace std;
                                  char c;
                                  set<char>s;
                                  map<char,int>m;
                                  int main(){
                                      while(true){
                                      	cin>>c;
                                      	if (c=='.')break;
                                  		s.insert(c);
                                  		m[c]++;
                                  	}
                                  	for (const auto&it:s)cout<<it;
                                  	cout<<endl;
                                  	for (const auto&it:m)cout<<it.second;
                                      return 0;
                                  }
                                  

                                  【入门】统计字母出现次数

                                  信息

                                  ID
                                  177
                                  时间
                                  1000ms
                                  内存
                                  64MiB
                                  难度
                                  5
                                  标签
                                  递交数
                                  2591
                                  已通过
                                  987
                                  上传者