{{adMap.article_top.title}}
{{adMap.article_top.cta}}

#提問 C++想問對這題目的想法?
程式設計板 {{ articleMoment(createdAt) }}

https://i.imgur.com/3hcPARE.png 目前有打出來,但對老師的評斷系統顯示超過限制時間。 以下是我的程式碼,希望高手能幫我看一下哪裡可以精簡或是提供更好的想法。 #include<iostream> using namespace std; int main(void) { char ch; string st,ary,ary1,ary2,ary3,ary4,ary5,ary6,ary7,ary8,ary9,ary10; int count=0;//算單字由幾個字母組成  cout<<"Input:"; while(ary+=(ch=cin.get()),ch!='\n');//輸入英文句子  int sum=0; int sum1=0,sum2=0,sum3=0,sum4=0,sum5=0,sum6=0,sum7=0,sum8=0,sum9=0,sum10=0; int b1=0,b2=0,b3=0,b4=0,b5=0,b6=0,b7=0,b8=0,b9=0,b10=0; int a=ary.length(); for(int i=0;i<a;i++) { if(ary[i]>='A'&&ary[i]<='Z'||ary[i]>='a'&&ary[i]<='z'||ary[i]=='-'||ary[i]=='\'') { st+=ary[i]; count++; } else if(st!="") { if(count==1) { sum1++; if(b1==0) ary1+=st; else { ary1+=","; ary1+=st; } b1++;  } else if(count==2) { sum2++; if(b2==0) ary2+=st; else { ary2+=","; ary2+=st; } b2++;  } else if(count==3) { sum3++; if(b3==0) ary3+=st; else { ary3+=","; ary3+=st; } b3++;  } else if(count==4) { sum4++; if(b4==0) ary4+=st; else { ary4+=","; ary4+=st; } b4++;  } else if(count==5) { sum5++; if(b5==0) ary5+=st; else { ary5+=","; ary5+=st; } b5++;  } else if(count==6) { sum6++; if(b6==0) ary6+=st; else { ary6+=","; ary6+=st; } b6++;  } else if(count==7) { sum7++; if(b7==0) ary7+=st; else { ary7+=","; ary7+=st; } b7++;  } else if(count==8) { sum8++; if(b8==0) ary8+=st; else { ary8+=","; ary8+=st; } b8++;  } else if(count==9) { sum9++; if(b9==0) ary9+=st; else { ary9+=","; ary9+=st; } b9++;  } else if(count==10) { sum10++; if(b10==0) ary10+=st; else { ary10+=","; ary10+=st; } b10++;  } count=0; st="";//st置空 } }  cout<<"1Word"<<" "<<sum1; if(sum1!=0) cout<<"("<<ary1<<")"; cout<<"\n2Word"<<" "<<sum2; if(sum2!=0) cout<<"("<<ary2<<")"; cout<<"\n3Word"<<" "<<sum3; if(sum3!=0) cout<<"("<<ary3<<")"; cout<<"\n4Word"<<" "<<sum4; if(sum4!=0) cout<<"("<<ary4<<")"; cout<<"\n5Word"<<" "<<sum5; if(sum5!=0) cout<<"("<<ary5<<")"; cout<<"\n6Word"<<" "<<sum6; if(sum6!=0) cout<<"("<<ary6 <<")"; cout<<"\n7Word"<<" "<<sum7; if(sum7!=0) cout<<"("<<ary7<<")"; cout<<"\n8Word"<<" "<<sum8; if(sum8!=0) cout<<"("<<ary8<<")"; cout<<"\n9Word"<<" "<<sum9; if(sum9!=0) cout<<"("<<ary9<<")"; cout<<"\n10Word"<<" "<<sum10; if(sum10!=0) cout<<"("<<ary10<<")"; return 0; }


  回文

你可能有興趣的文章...

{{adMap.article_bottom.cta}}
{{adMap.article_bottom.title}}
{{adMap.article_bottom.content}}

全部留言

B1 {{commentMoment( "2019-04-06T02:13:22.381Z" )}}

為什麼不用str.length()

為什麼不用str.length()
0
B2 {{commentMoment( "2019-04-06T02:15:24.376Z" )}}

等等,你可不可以丟到像是ideone之類的地方 沒有縮排的code看得豆頁頗疼。。。

等等,你可不可以丟到像是ideone之類的地方 沒有縮排的code看得豆頁頗疼。。。
0
B3 {{commentMoment( "2019-04-06T02:27:24.360Z" )}}

我先附上code,我在下一則那邊講解 https://github.com/Miohitokiri/Codes/blob/master/test.cpp

我先附上code,我在下一則那邊講解 https://github.com/Miohitokiri/Codes/blob/master/test.cpp
1
B4 {{commentMoment( "2019-04-06T02:39:28.479Z" )}}

大概看了一下,你的做法有點複雜 1. 你用cin/cout卻沒有開IO優化,這樣速度會很慢(雖然我覺得你們老師沒有卡這個) 2. 一個一個做if else太耗時間了,我是直接開陣列紀錄,這樣可以少掉if else的比較時間 3. string + string 的操作我印象中也很浪費時間(?)(我不是很確定,我平常都是直接開vector push_back)(雖然我覺得你們老師應該也沒有卡這個) btw我除了那行#include && IO優化我猜你可能會看不懂外(這個我最後講) 其他你應該都可以。。。吧(我就assume你可以吧,畢竟那些都是C++的標準STL,之類的) 假設你不會用陣列紀錄,也不會IO優化 那麼有另外一個比較好的解決方法:用switch 大概這樣 switch ( size ){     case 1: ...     case 2: ... } 大概像這樣,switch的詳細用法可以自己google一下了 然後我講講bits/stdc++.h這個邪惡的標頭檔 基本上來說這不是標準,所以只能在GNU GCC/G++上使用 這標頭檔的功能是什麼呢? 簡單來說就是把你各種用得到的、用不到的其他標頭檔都include進來XD 然後IO優化 簡單講就是可以加速C++的cin/cout 深入一點講。。。你可以看這篇(不是我寫的)文章,這邊應該講得比較清楚(人如其名) http://chino.taipei/note-2016-0311C-的輸出入cin-cout和scanf-printf誰比較快?/ 大概就是這樣

大概看了一下,你的做法有點複雜 1. 你用cin/cout卻沒有開IO優化,這樣速度會很慢(雖然我覺得你們老師沒有卡這個) 2. 一個一個做if else太耗時間了,我是直接開陣列紀錄,這樣可以少掉if else的比較時間 3. string + string 的操作我印象中也很浪費時間(?)(我不是很確定,我平常都是直接開vector push_back)(雖然我覺得你們老師應該也沒有卡這個) btw我除了那行#include && IO優化我猜你可能會看不懂外(這個我最後講) 其他你應該都可以。。。吧(我就assume你可以吧,畢竟那些都是C++的標準STL,之類的) 假設你不會用陣列紀錄,也不會IO優化 那麼有另外一個比較好的解決方法:用switch 大概這樣 switch ( size ){     case 1: ...     case 2: ... } 大概像這樣,switch的詳細用法可以自己google一下了 然後我講講bits/stdc++.h這個邪惡的標頭檔 基本上來說這不是標準,所以只能在GNU GCC/G++上使用 這標頭檔的功能是什麼呢? 簡單來說就是把你各種用得到的、用不到的其他標頭檔都include進來XD 然後IO優化 簡單講就是可以加速C++的cin/cout 深入一點講。。。你可以看這篇(不是我寫的)文章,這邊應該講得比較清楚(人如其名) http://chino.taipei/note-2016-0311C-的輸出入cin-cout和scanf-printf誰比較快?/ 大概就是這樣
1
留言已被刪除

留言已被刪

本留言就像流星一樣,一閃即逝。

本留言就像流星一樣,一閃即逝。

B6 {{commentMoment( "2019-04-06T03:02:12.151Z" )}}

B5 樓上的兄臺 'tis在原PO給的解裡面是4唷 不是單純計算字母數量的3唷

B5 樓上的兄臺 'tis在原PO給的解裡面是4唷 不是單純計算字母數量的3唷
0
留言已被刪除

留言已被刪

本留言就像流星一樣,一閃即逝。

本留言就像流星一樣,一閃即逝。

B8 {{commentMoment( "2019-04-06T04:54:02.253Z" )}}

B6 慘,我不會閱讀 我現在去改code QAQ

B6 慘,我不會閱讀 我現在去改code QAQ
0
匿名

匿名

B9 (原 Po)   {{commentMoment( "2019-04-06T13:42:44.675Z" )}}

@B2 抱歉讓你看得很辛苦~如你所說,那行#include && IO優化我真的是第一次看到.....我目前只學到C++基本語法,所以有些東西是靠google來的(如:while(ary+=(ch=cin.get()),ch!='\n');//輸入英文句子這行)。 我有把它改成switch case的再傳,系統一樣跳超過限制時間.... 對了說一下我使用的是DevC++再寫程式,然後系統規定執行畫面中的最後一行是不用換行的

@B2 抱歉讓你看得很辛苦~如你所說,那行#include && IO優化我真的是第一次看到.....我目前只學到C++基本語法,所以有些東西是靠google來的(如:while(ary+=(ch=cin.get()),ch!='\n');//輸入英文句子這行)。 我有把它改成switch case的再傳,系統一樣跳超過限制時間.... 對了說一下我使用的是DevC++再寫程式,然後系統規定執行畫面中的最後一行是不用換行的
0
B10 {{commentMoment( "2019-04-06T14:54:45.185Z" )}}

B9 其實只要寫 while ( cin >> str ) 這樣就可一直讀數字下去了(? 阿不對,你要吃換行,沒事

B9 其實只要寫 while ( cin >> str ) 這樣就可一直讀數字下去了(? 阿不對,你要吃換行,沒事
0
匿名

匿名

B11 (原 Po)   {{commentMoment( "2019-04-06T16:43:55.811Z" )}}

B10 我用你寫的程式碼下去跑,一直卡在cin跳不出while迴圈,要下什麼判斷讓跳出呢?

B10 我用你寫的程式碼下去跑,一直卡在cin跳不出while迴圈,要下什麼判斷讓跳出呢?
0
B12 {{commentMoment( "2019-04-06T17:02:53.342Z" )}}

B11  用while ( cin >> str ) 要等到他讀到EOF ( end of file ) 才會結束 然後我沒記錯的話再 win 下面是要按 ctrl + z,不然就是要開cmd導入檔案到執行檔裡面 我比較習慣用Unix-like的系統,我不確定我的回答是否正確,如果有誤請用力鞭打(X

B11  用while ( cin >> str ) 要等到他讀到EOF ( end of file ) 才會結束 然後我沒記錯的話再 win 下面是要按 ctrl + z,不然就是要開cmd導入檔案到執行檔裡面 我比較習慣用Unix-like的系統,我不確定我的回答是否正確,如果有誤請用力鞭打(X
0
匿名

匿名

B13 {{commentMoment( "2019-04-08T11:50:31.638Z" )}}

樓上 macOS就是Unix吧❤️

樓上 macOS就是Unix吧❤️
0
B14 {{commentMoment( "2019-04-10T08:56:57.371Z" )}}

B13 嚴格來說不算 Unix只有指100%都是Unix無調整吧(? 通常只拿核心來用還是叫 Unix-like(?

B13 嚴格來說不算 Unix只有指100%都是Unix無調整吧(? 通常只拿核心來用還是叫 Unix-like(?
1
B15 {{commentMoment( "2019-04-10T08:59:50.524Z" )}}

B13 我查到了,macOS 是類 Unix 也就是 Unix-like https://zh.wikipedia.org/zh-tw/类Unix系统 況且我平常不用 macOS 也是用 Arch 啊,Arch 就是 Unix-like 了吧

B13 我查到了,macOS 是類 Unix 也就是 Unix-like https://zh.wikipedia.org/zh-tw/类Unix系统 況且我平常不用 macOS 也是用 Arch 啊,Arch 就是 Unix-like 了吧
1
B16 {{commentMoment( "2019-04-24T07:38:49.277Z" )}}

*這種程式如果會跑太久 基本上就是有哪裡寫錯了 不會是效率問題 你可以往這方面去抓bug* while(ary+=(ch=cin.get()),ch!='\n'); 越到'\n'(換行) 才會停  但input最後不一定會有換行 沒有的話就會卡到死 直接用while(cin.get(ch))就可以避免 這點可以先上judge確認一下 然後可以善用array  把ary1-10 寫成ary[10] 這樣就能用for loop一次做完 例如最後的輸出可以寫成: for (i=0; i<10; i++)     cout << i << "Word " << sum[i];     if (sum[i] != 0)          cout << " ("<< ary[i] <<")\n "; 同理中間那段也能這樣改 最後大概可以把200行的程式壓到30行左右 另外運算符前後都建議加個空格 同樣是為了可讀性跟方便除錯

*這種程式如果會跑太久 基本上就是有哪裡寫錯了 不會是效率問題 你可以往這方面去抓bug* while(ary+=(ch=cin.get()),ch!='\n'); 越到'\n'(換行) 才會停  但input最後不一定會有換行 沒有的話就會卡到死 直接用while(cin.get(ch))就可以避免 這點可以先上judge確認一下 然後可以善用array  把ary1-10 寫成ary[10] 這樣就能用for loop一次做完 例如最後的輸出可以寫成: for (i=0; i<10; i++)     cout << i << "Word " << sum[i];     if (sum[i] != 0)          cout << " ("<< ary[i] <<")\n "; 同理中間那段也能這樣改 最後大概可以把200行的程式壓到30行左右 另外運算符前後都建議加個空格 同樣是為了可讀性跟方便除錯
0


登入後發表留言






確定要刪除此文章?
#提問 C++想問對這題目的想法?

https://i.imgur.com/3hcPARE.png 目前有打出來,但對老師的評斷系統顯

檢舉{{reportFloor? '留言B'+reportFloor: '文章'}}
檢舉{{'原po回覆B'+reportFloor+'留言'}}
請選擇刪除文章原因
請選擇刪除留言原因
您即將進入之文章內容需滿十八歲方可瀏覽

根據「電腦網路內容分級處理辦法」修正條文第六條第三款規定,已於網站首頁或各該限制級網頁,依台灣網站分級推廣基金會規定作標示。若您尚未年滿十八歲,麻煩點選離開。若您已滿十八歲,一樣不可將本區之內容派發、傳閱、出售、出租、交給或借予年齡未滿18歲的人士瀏覽閱讀,或將本網站內容向該人士出示、播放或放映。

離開
問題讀取中...稍待60秒...