|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
- #include<iostream>
- using namespace std;
- int main()
- {
- int ch,a=0,b=0,c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0;
-
- while((ch=getchar())!='\n')
- {
- if(ch==97){
- a+=1;
- continue;}
- if(ch==98){
- b+=1;
- continue;}
- if(ch==99){
- c+=1;
- continue;}
- if(ch==100){
- d+=1;
- continue;}
- if(ch==101){
- e+=1;
- continue;}
- if(ch==102){
- f+=1;
- continue;}
- if(ch==103){
- g+=1;
- continue;}
- if(ch==104){
- h+=1;
- continue;
- }
- if(ch==105){
- i+=1;
- continue;}
- if(ch==106){
- j+=1;
- continue;}
- if(ch==107){
- k+=1;
- continue;}
- if(ch==108){
- l+=1;
- continue;}
- if(ch==109){
- m+=1;
- continue;}
- if(ch==110){
- n+=1;
- continue;}
- if(ch==111){
- o+=1;
- continue;}
- if(ch==112){
- p+=1;
- continue;}
- if(ch==113){
- q+=1;
- continue;}
- if(ch==114){
- r+=1;
- continue;}
- if(ch==115){
- s+=1;
- continue;}
- if(ch==116){
- t+=1;
- continue;}
- if(ch==117){
- u+=1;
- continue;}
- if(ch==118){
- v+=1;
- continue;}
- if(ch==119){
- w+=1;
- continue;}
- if(ch==120){
- x+=1;
- continue;}
- if(ch==121){
- y+=1;
- continue;}
- if(ch==122){
- z+=1;
- continue;}
- }
-
- if(a&1==1)
- cout<<"a";
- if(b&1==1)
- cout<<"b";
- if(c&1==1)
- cout<<"c";
- if(d&1==1)
- cout<<"d";
- if(e&1==1)
- cout<<"e";
- if(f&1==1)
- cout<<"f";
- if(g&1==1)
- cout<<"g";
- if(h&1==1)
- cout<<"h";
- if(i&1==1)
- cout<<"i";
- if(j&1==1)
- cout<<"j";
- if(k&1==1)
- cout<<"k";
- if(l&1==1)
- cout<<"l";
- if(m&1==1)
- cout<<"m";
- if(n&1==1)
- cout<<"n";
- if(o&1==1)
- cout<<"o";
- if(p&1==1)
- cout<<"p";
- if(q&1==1)
- cout<<"q";
- if(r&1==1)
- cout<<"r";
- if(s&1==1)
- cout<<"s";
- if(t&1==1)
- cout<<"t";
- if(u&1==1)
- cout<<"u";
- if(v&1==1)
- cout<<"v";
- if(w&1==1)
- cout<<"w";
- if(x&1==1)
- cout<<"x";
- if(y&1==1)
- cout<<"y";
- if(z&1==1)
- cout<<"z";
-
- return 0;
- }
复制代码
问题:编写一个程序,输入一组字符(只包含字母,且长度小于100,回车结束输入),该字符数组中只有一个字符出现的次数为奇数,其他字符出现的次数均为偶数,输出出现次数为奇数的字符。
这段代码中,你使用了26个变量来记录字母出现的次数,并在循环中逐个判断字符属于哪个字母并累加计数。这种方式不仅代码冗长且重复,还降低了程序的效率。
要加快程序的运行速度,可以使用一个数组来代替这些变量,然后根据字符的ASCII码值来直接累加数组元素。
下面是一个修改后的示例代码:
- #include <iostream>
- using namespace std;
- int main()
- {
- int counts[26] = {0}; // 用数组来记录每个字母出现的次数
-
- char ch;
- while ((ch = getchar()) != '\n')
- {
- if (ch >= 'a' && ch <= 'z') // 只统计小写字母
- counts[ch - 'a'] += 1; // 根据字符的ASCII码值来累加对应的数组元素
- }
-
- for (int i = 0; i < 26; ++i)
- {
- if (counts[i] > 0)
- {
- cout << static_cast<char>(i + 'a') << ": " << counts[i] << endl;
- }
- }
-
- return 0;
- }
复制代码
在这个修改后的代码中,我们使用一个长度为26的整型数组`counts`来记录每个字母的出现次数。在循环中,我们只统计小写字母,并通过字符的ASCII码值减去字符'a'的ASCII码值来获取数组的索引,并累加对应的数组元素。最后,我们遍历数组,输出非零元素,即每个字母出现的次数。
相比原来的代码,这个修改后的代码效率更高,因为它使用了一个数组来一次性处理所有的字母,不再需要逐个判断和累加。同时,由于只统计小写字母,也节省了一些不必要的判断条件。
以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
|
|