读取文本中的数字(其中包含中英文字符)

// c++_5.cpp : 定义控制台应用程序的入口点。
//

#include "stdafx.h"
#include <fstream>
#include <iostream>
#include <string>
#include <vector>
#include <sstream>


using namespace std;



bool JudgeNum(string str, int& iTmp)
{
	bool bNum = true;
	string::size_type strSize = str.size();
	if (strSize == 0 )
	{
		bNum = false;
	}
	for (int i = 0; i < strSize; ++i)
	{
		char ch = str.at(i);
		if ((ch < '0') || (ch > '9'))
		{
			bNum = false;
			break;
		}
	}

	if (bNum)
	{
		istringstream iss(str);
		iss >> iTmp;
	}

	return bNum;
}



int _tmain(int argc, _TCHAR* argv[])
{

	ifstream infile("C:\\Users\\sony\\Desktop\\1.txt");
	if (!infile)
	{
		cout << "File open error";
	}

	int a, b;
	vector<int> iVec;
	int iTmp = 0;
	string strTmp;

	if (!infile)
	{
		return -1;
	}
	while (getline(infile, strTmp, ' '))
	{
		if (JudgeNum(strTmp, iTmp))
		{
			iVec.push_back(iTmp);
		}
	}


	infile.close();

	system("pause");
	return 0;
}
istringstream类用于执行C++风格的串流的输入操作。
ostringstream类用于执行C风格的串流的输出操作。

strstream类同时可以支持C风格的串流的输入输出操作。

istringstream是由一个string对象构造而来,istringstream类从一个string对象读取字符。
istringstream的构造函数原形如下:
istringstream::istringstream(string str);


用stringstream转化

int _tmain(int argc, _TCHAR* argv[])
{

	stringstream strStream;
	
	
	//int -> string
	string result;
	int i = 999;
	strStream << i; //将int输入流
	strStream >> result; //从strstream中输出
	
	//进行多次转换时要clear()
	std::stringstream stream;
	int first, second;
	stream<< "456"; //插入字符串
	stream >> first; //转换成int
	std::cout << first << std::endl;
	stream.clear(); //在进行多次转换前,必须清除stream
        stream.str("");
	stream << true; //插入bool值
	stream >> second; //提取出int
	std::cout << second << std::endl;

	system("pause");
	return 0;
}


你可能感兴趣的:(读取文本中的数字(其中包含中英文字符))