在第一次使用在线OJ时,题目是这样的:


输入一个字符串,求出该字符串包含的字符集合 输入描述: 每组数据输入一个字符串,字符串最大长度为100,且只包含字母,不可能为空串,区分大小写。 输出描述: 每组数据一行,按字符串原有的字符顺序,输出字符集合,即重复出现并靠后的字母不输出。


这是第一次提交的代码:

#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; 注意每次循环结束后将各变量或容器的状态更新为初始状态。