QHQ-It was day full of memories

C++字符串分割

C++没有split分割的函数!!!!

C++没有c语言的那样方便的格式化输入,像c语言你如果想一次性输入1#2,而分别把1和2赋值给x和y,你可以这样: scanf("%d#%d",&x,&y); 当然你也可以自己定义一个方法来实现这个想法。

```
#include <iostream>
#include <string>
#include <cstddef>
#include <vector>
using namespace std;
namespace strg
{
    //函数模板
    template<typename Container>
    inline std::size_t strtok(std::string& str, Container& cont, const std::string defstr = " ")
        {
        cont.clear();
        std::size_t size = 0;
        std::size_t begpos = 0 ;
        std::size_t endpos = 0 ;
        begpos = str.find_first_not_of(defstr);
        while (begpos != std::string::npos)
        {
            size++;
            endpos = str.find_first_of(defstr, begpos);
            if (endpos == std::string::npos)
            {
                endpos = str.size();
            }
            string ssubstr = str.substr(begpos, endpos -begpos);
            cont.push_back(ssubstr);    //将分割的字符串存入容器当中
            begpos = str.find_first_not_of(defstr, endpos+1);
        }
        return size;
	}

	template<typename Container>
	inline size_t stringtok(std::string& str, Container& cont, const std::string defstr = " ")
	{
        cont.clear();
        std::size_t size = 0;
        std::size_t length = str.length();

        std::size_t begpos = 0;
        std::size_t endpos = 0;
        while (begpos < length)
        {
            size++;
            begpos = str.find_first_not_of(defstr,begpos);
            if (begpos == std::string::npos)
                return -1;
            endpos = str.find_first_of(defstr, begpos);
            if (endpos == std::string::npos)
            {
                endpos = length;
            }
            string ssubstr = str.substr(begpos, endpos - begpos);
            cont.push_back(ssubstr);

            begpos = endpos + 1;
        }
        return size;
	}
}

int main()
{
	string str =  "- This, a sample string.";
	vector<string> vec;
	int size = strg::strtok(str,vec,"-,. ");
	for (auto& it : vec)
        cout << it << " ";
	cout<< endl;
	system("pause");
	return 0;
}

```

而我今天主要想说的是另一个巧妙的方法:用一个小变量temp来中转:

```
int main()
{
    string str;
    int x = 0;
    int y = 0;
    cin>>str;
    int s = str.length();
    int temp = 0;
    for(int i = 0; i<s; i++)
    {
        if(str[i] != '#')
        {
            temp = temp * 10 + (int)str[i] -48;
        }
        else
        {
            x = temp;
            temp = 0;
        }
    }
y  = temp;
```

这样如果你想输入1#2,它就会通过temp中转后分别赋值给x=1和y=2,这个例子仅是转换为想要的数值int型。