C++分割输入字符串

C++分割输入字符串

Scroll Down

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型。