在第一次使用在线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