在第一次使用在線OJ時,題目是這樣的:ios
輸入一個字符串,求出該字符串包含的字符集合
輸入描述:
每組數據輸入一個字符串,字符串最大長度爲100,且只包含字母,不可能爲空串,區分大小寫。
輸出描述:
每組數據一行,按字符串原有的字符順序,輸出字符集合,即重複出現並靠後的字母不輸出。編程
這是第一次提交的代碼:ide
#define _CRT_SECURE_NO_WARNINGS 1 #include<iostream> using namespace std; #include<string> #include<stdlib.h> int main() { string s1; s1.reserve(100); string s2; int i = 0; s2.reserve(100); while(cin>>s1) { for (i = 0; i < s1.size(); i++) { if (s2.find(s1[i]) == -1) { s2.push_back(s1[i]); } } auto it = s2.begin(); while (it != s2.end()) { cout << *it; it++; } } system("pause"); return 0; }
這樣的代碼能夠完成在邏輯上沒有任何錯誤,可是沒有經過測試案例,
經過反覆的琢磨和研究原來是由於在每次循環輸入字符串後在輸出時沒有換行而且沒有對s1和s2中的內容清空,因此在下一次循環時會重複輸出
正確的代碼以下,測試
#define _CRT_SECURE_NO_WARNINGS 1 #include<iostream> using namespace std; #include<string> #include<stdlib.h> int main() { string s1; s1.reserve(100); string s2; int i = 0; s2.reserve(100); while(cin>>s1) { for (i = 0; i < s1.size(); i++) { if (s2.find(s1[i]) == -1) { s2.push_back(s1[i]); } } auto it = s2.begin(); while (it != s2.end()) { cout << *it; it++; } cout<<endl; s1.clear(); s2.clear(); } system("pause"); return 0; }
因此在此針對這個題目盡心幾點在在線OJ中編程的總結:
在線OJ中須要經過循環輸入進行輸入(while)
注意輸出格式:頗有必要在每一次循環的輸出後加endl;
注意每次循環結束後將各變量或容器的狀態更新爲初始狀態。spa