统计字符,逆序,正前负后存储

3(1)

写一个算法统计在输入字符串中各个字符出现的频度并将结构存入文件(字符串中的合法字符为A~Z这26个字母和0~9这10个数字)

 1 //算法:
 2 /*
 3 void cnout()
 4 {
 5     for(int i=0;i<36;i++)
 6     {
 7         num[i]=0;
 8     }
 9     while(ch=getchar()!='\n')
10     {
11         if(ch>='0'&&ch<='9')
12         {
13             i=ch-48;
14             num[i]++;
15         }
16         else if(ch>='A'&&ch<='Z')
17         {
18             i=ch-65+10;
19             num[i]++;
20         }
21     }
22         for(int i=0;i<10;i++)
23         {
24             cout<<"数字"<<char(i+48)<<"的个数为"<<num[i]<<endl; 
25         }
26         for(int i=10;i<36;i++)
27         {
28             cout<<"字母"<<char(i+65-10)<<"的个数为"<<num[i]<<endl;
29          } 
30 }
31 */
 1 //源代码:
 2 #include<bits/stdc++.h>
 3 using namespace std;
 4 int num[50];
 5 char ch;
 6 void cnout()
 7 {
 8     int i;
 9     for(int i=0;i<36;i++)
10     {
11         num[i]=0;
12     }
13     ch=getchar();
14     while(ch!='\n')
15     {
16         if(ch>='0'&&ch<='9')
17         {
18             i=ch-48;
19             num[i]++;
20         }
21         else if(ch>='A'&&ch<='Z')
22         {
23             i=ch-65+10;
24             num[i]++;
25         }
26         ch=getchar();
27     }
28         for(int i=0;i<10;i++)
29         {
30             cout<<"数字"<<char(i+48)<<"的个数为"<<num[i]<<endl; 
31         }
32         for(int i=10;i<36;i++)
33         {
34             cout<<"字母"<<char(i+65-10)<<"的个数为"<<num[i]<<endl;
35          } 
36 }
37 int main()
38 {
39     cnout();
40     return 0;
41 }

3(2)

写一个递归算法来实现字符串中逆序存储,要求不另设字符串存储空间。

 1 //算法:
 2 /*
 3 char cc(char a[])
 4 {     
 5      char ch;
 6      ch=getchar();
 7      static i=0;
 8      if(ch!='\n')
 9      {
10      cc(a);
11      a[i]=ch;
12      i++;
13      }
14      a[i]='\0';
15 }
16 */
 1 //源代码:
 2 #include<bits/stdc++.h>
 3 using namespace std;
 4 int i=0;
 5 char a[1000];
 6 char cc(char a[])
 7 {
 8     char ch;
 9     ch=getchar();
10     if(ch!='\n')
11     {
12         cc(a);
13         a[i]=ch;
14         i++;
15     }
16     a[i]='\0';
17 }
18 int main()
19 {
20     cc(a);
21     int j=0;
22     while(a[j]!='\0')
23     {
24         cout<<a[j]<<" ";
25         j++;
26     }
27     return 0;
28 }

3(6)

设任意n个整数存放于数组A【1…n】中,试编写算法,将所有正数排在所有负数前面(要求:算法时间复杂度为O(n))

 1 //算法:
 2 /*
 3 void cc(int a[],int n)
 4 {
 5 int i=0,j<=n-1,x;
 6 while(i<j)
 7 {
 8 while(i<j&&a[i]>0) i++;
 9 while(i<j&&a[j]<0) j--;
10 if(i<j) 
11 {
12 x=a[i];
13 a[i]=a[j];
14 a[j]=x;
15 }
16 }
17 }
18 */
 1 //源代码:
 2 #include<bits/stdc++.h>
 3 using namespace std;
 4 int a[1000];
 5 void cc(int a[],int n)
 6 {
 7     int i=0,j=n-1,x;
 8     while(i<j)
 9     {
10         while(i<j&&a[i]>0) i++;
11         while(i<j&&a[j]<0) j--;
12         if(i<j) 
13         {
14             x=a[i];
15             a[i]=a[j];
16             a[j]=x;
17         }
18     }
19 }
20 int main()
21 {
22     int n;
23     cin>>n;
24     for(int i=0;i<n;i++)
25     {
26         cin>>a[i];
27     }
28     cc(a,n);
29     for(int i=0;i<n;i++)
30     {
31         cout<<a[i]<<" ";
32     }
33     return 0;
34 }

posted @ 2022-04-18 20:22  格蕾  阅读(100)  评论(0)    收藏  举报