切換
舊版
前往
大廳
主題

【C++】讀文章,算字母個有幾個。

鍋貼企鵝 | 2013-09-20 19:13:43 | 巴幣 0 | 人氣 1515

  就是讀文章,算裡面A有幾個B有幾個一直到Z有幾個,然後大小寫沒差。
第一行要給出文章有幾行,恩,大概就這樣,使用switch來寫,可能不好看。 QQ

  範例:





#include<iostream>
#include<fstream>
#include<string>

using namespace std;

void compare(string k,int a[]);

int main()
{
    fstream myfile;
    myfile.open("test.txt");
    int alph[26];
    for(int i=0;i<26;i++)
            alph[i]=0;
    int n;
    string t;
    myfile >> n;
    for(int i=0;i<n+1;i++)
    {
            getline(myfile,t);
            for(int i=0;i<t.length();i++)
                    t[i]=tolower(t[i]);
            compare(t,alph);
    }
    
    cout << "a " << alph[0]<<endl;
    cout << "b " << alph[1]<<endl;
    cout << "c " << alph[2]<<endl;
    cout << "d " << alph[3]<<endl;
    cout << "e " << alph[4]<<endl;
    cout << "f " << alph[5]<<endl;
    cout << "g " << alph[6]<<endl;
    cout << "h " << alph[7]<<endl;
    cout << "i " << alph[8]<<endl;
    cout << "j " << alph[9]<<endl;
    cout << "k " << alph[10]<<endl;
    cout << "l " << alph[11]<<endl;
    cout << "m " << alph[12]<<endl;
    cout << "n " << alph[13]<<endl;
    cout << "o " << alph[14]<<endl;
    cout << "p " << alph[15]<<endl;
    cout << "q " << alph[16]<<endl;
    cout << "r " << alph[17]<<endl;
    cout << "s " << alph[18]<<endl;
    cout << "t " << alph[19]<<endl;
    cout << "u " << alph[20]<<endl;
    cout << "v " << alph[21]<<endl;
    cout << "w " << alph[22]<<endl;
    cout << "x " << alph[23]<<endl;
    cout << "y " << alph[24]<<endl;
    cout << "z " << alph[25]<<endl;
    
    system("pause");
    return 0;
}

void compare(string k,int a[])
{
     for(int i=0;i<k.length();i++)
     {
             switch(k[i])
             {
                         case 'a':
                              a[0]++;
                              break;
                         case 'b':
                              a[1]++;
                              break;
                         case 'c':
                              a[2]++;
                              break;
                         case 'd':
                              a[3]++;
                              break;     
                         case 'e':
                              a[4]++;
                              break;
                         case 'f':
                              a[5]++;
                              break;
                         case 'g':
                              a[6]++;
                              break;
                         case 'h':
                              a[7]++;
                              break;
                         case 'i':
                              a[8]++;
                              break;
                         case 'j':
                              a[9]++;
                              break;
                         case 'k':
                              a[10]++;
                              break;
                         case 'l':
                              a[11]++;
                              break;
                         case 'm':
                              a[12]++;
                              break;
                         case 'n':
                              a[13]++;
                              break;
                         case 'o':
                              a[14]++;
                              break;
                         case 'p':
                              a[15]++;
                              break;
                         case 'q':
                              a[16]++;
                              break;
                         case 'r':
                              a[17]++;
                              break;
                         case 's':
                              a[18]++;
                              break;
                         case 't':
                              a[19]++;
                              break;
                         case 'u':
                              a[20]++;
                              break;
                         case 'v':
                              a[21]++;
                              break;
                         case 'w':
                              a[22]++;
                              break;
                         case 'x':
                              a[23]++;
                              break;
                         case 'y':
                              a[24]++;
                              break;
                         case 'z':
                              a[25]++;
                              break;
                              }
             }
}





創作回應

Hello
for(int i=0;i<k.length();i++)
{
int temp=k[i]-'a';
a[temp]++;
}

改成這樣會不會好點?感覺比較精簡
2013-09-21 01:42:54
鍋貼企鵝
不確定不存成變數可不可以直接減字元,不過要是先A='a',再用A去減確定可以。
2013-09-21 15:07:28
Hello
恩,反正大概就是那個意思,這樣就不用用switch case寫得落落長

雖然直觀不過看code的時候會比較累
2013-09-21 15:13:26
鍋貼企鵝
[e12]
2013-09-21 15:18:53
Snake
if(k[i]>='a'&&k[i]<='z')
{
a[k[i]-'a']++; //直接減應該OK
}
else if(k[i]>='A'&&k[i]<='A')
{
a[k[i]-'A']++;
}
else
{
a[26]++; //存其他字元
}
2013-11-09 16:01:29

更多創作