青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

子彈 の VISIONS

NEVER back down ~~

C++博客 首頁 新隨筆 聯系 聚合 管理
  112 Posts :: 34 Stories :: 99 Comments :: 0 Trackbacks
與大家分享我的工具箱中的一些小TOOLS
歡迎自由取用……?? :-)
歡迎多提意見
waker615@gmail.com

--------------------------------------------------
以下為函數的聲明:
	//-------------------------------------------------------------------------
	// STRING
	std::string& cut (std::string& s, const char ce =' '); // ce = "character of end"
	std::string& trim(std::string& s); // trim all space both left and right
	std::string& trimleft (std::string& s);
	std::string& trimright(std::string& s);
	std::string& toupper (std::string& s);
	std::string& tolower(std::string& s);
	std::string& format (std::string& s, const char* fmt, ...);

	// replace all the old substring with the new one in the source string
	std::string& replace(std::string& s, const std::string& oldS, const std::string& newS);

	// split string to substrings by separator-string
	std::vector<std::string>& split(const std::string& s, std::vector<std::string>& vs, const std::string& sep =";");
	
	// join substrings to a big string separated by separator-string
	std::string& join(const std::vector<std::string>& vs, std::string& s, const std::string& sep =";");

	// get all substrings by two tags WITH tags from a source string
	// e.g.
	// s = <a href="someurl">Click Here</a>
	// getDataByTags(s, vs, "<", ">"); then 
	// vs would hold two elemts:
	// vs[0] = "<a href=\"someurl\">";
	// vs[1] = "</a>";
	bool getDataByTags(const std::string& s, std::vector<std::string >& tags,
		const std::string& begTag, const std::string& endTag );
	
	// get all substrings by two tags but WITHOUT tags from a source string
	// e.g.
	// s = <a href="someurl">Click Here</a>
	// getDataByTags(s, vs, "<", ">"); then 
	// vs would hold two elemts:
	// vs[0] = "a href=\"someurl\"";
	// vs[1] = "/a";
	bool getDataBetweenTags(const std::string& s, std::vector<std::string >& data,
				 const std::string& begTag, const std::string& endTag );
以下為函數的定義:
	//-------------------------------------------------------------------------
	// STRING
	
	std::string& cut (std::string& s, const char ce)
	{
		std::string::iterator end = std::find(s.begin(), s.end(), ce);
		return (s.assign(s.begin(), end));
	}

	std::string& trim(std::string& s)
	{
		std::string::iterator beg = s.begin();
		while (beg != s.end() && ::isspace(*beg))
			++beg;
		
		std::string::reverse_iterator end = s.rbegin();
		while (end != s.rend() && ::isspace(*end))
			++end;
		
		return s.assign(beg, end.base());
	}
	
	std::string& trimleft(std::string& s)
	{
		std::string::iterator it = s.begin();
		while (it != s.end() && ::isspace(*it))
			++it;
		return s.assign(it, s.end());
	}
	
	std::string& trimright(std::string& s)
	{
		std::string::reverse_iterator it = s.rbegin();
		while (it != s.rend() && ::isspace(*it))
			++it;
		return s.assign(s.begin(), it.base());
	}
	
	std::string& toupper(std::string& s)
	{
		typedef std::string::iterator SIT;
		for (SIT it = s.begin(); it != s.end(); ++it)
		{
			*it = ::toupper(*it);
		}
		return s;
	}
	
	std::string& tolower(std::string& s)
	{
		typedef std::string::iterator SIT;
		for (SIT it = s.begin(); it != s.end(); ++it)
		{
			*it = ::tolower(*it);
		}
		return s;
	}

	std::string& format(std::string& s, const char* fmt, ...)
	{
		const int MAX_LINE_LEN = 1024; // user defined
		char buf[MAX_LINE_LEN] = {0};
		va_list ap;
		va_start(ap, fmt);
		_vsnprintf(buf, MAX_LINE_LEN, fmt, ap);
		va_end(ap);
		return (s.assign(buf));
	}

	std::string& replace(std::string& s, const std::string& oldS, const std::string& newS)
	{
		if (std::string::npos == s.find(oldS)) return (s);
		
		typedef std::string::size_type SST;
		SST beg =0, tmp =0;
		SST oldLen = oldS.size();
		SST newLen = newS.size();
		while (std::string::npos != (beg = (s.find(oldS, tmp))))
		{
			s.replace(beg, oldLen, newS);
			tmp = beg + newLen;
			std::cout << beg << "-" << tmp << ": " << s.c_str() << std::endl;
		}
		return (s);
	}

	std::string& join(const std::vector<std::string>& vs, std::string& s, const std::string& sep)
	{
		if (vs.empty()) return (s);

		typedef std::vector<std::string>::const_iterator VSCIT;
		
		for (VSCIT it = vs.begin(); it != vs.end(); ++ it)
		{
			s += *it;
			s += sep;
		}
		return (s);
	}

	//	bool split(const std::string& s, std::vector<std::string >& vs, const std::string& sep)

	std::vector<std::string>& split(const std::string& s, std::vector<std::string>& vs, const std::string& sep)
	{
		if (s.empty()) 
			return (vs);

		if (sep.empty() || std::string::npos == s.find(sep))
		{
			vs.push_back(s);
			return (vs);
		}

		typedef std::string::size_type SST;
		SST seplen = sep.size();
		SST beg =0, end =std::string::npos;

		while ( std::string::npos != (end=s.find(sep, beg)) )
		{
			vs.push_back(s.substr(beg, end-beg));
			beg = end+seplen;
		}
		vs.push_back(s.substr(beg, s.size()-beg));

		return (vs);
	}
	
	bool getDataByTags(const std::string& s, std::vector<std::string >& tags,
				 const std::string& begTag, const std::string& endTag )
	{
		if (s.empty() || begTag.empty() || endTag.empty())
			return false;

		if (std::string::npos == s.find(begTag) ||
			std::string::npos == s.find(endTag) )
		{
			return false;
		}
		
		typedef std::string::size_type SST;
		SST beglen = begTag.size();
		SST endlen = endTag.size();
		SST beg =0, end =0;
		tags.clear();
		
		while ( std::string::npos != (beg=s.find(begTag, end)) )
		{
			if( std::string::npos != (end=s.find(endTag, beg+beglen)) )
			{
				end += endlen;
				tags.push_back(s.substr(beg, end-beg));
			}
			else
				break;
		}

		return true;
	}
	
	bool getDataBetweenTags(const std::string& s, std::vector<std::string >& data,
				 const std::string& begTag, const std::string& endTag )
	{
		if (s.empty() || begTag.empty() || endTag.empty())
			return false;
		
		if (std::string::npos == s.find(begTag) ||
			std::string::npos == s.find(endTag) )
		{
			return false;
		}
		
		typedef std::string::size_type SST;
		SST beglen = begTag.size();
		SST endlen = endTag.size();
		SST beg =0, end =0;
		data.clear();
		
		while ( std::string::npos != (beg=s.find(begTag, end)) )
		{
			if( std::string::npos != (end=s.find(endTag, beg+beglen)) )
			{
				data.push_back(s.substr(beg+beglen, end-beg-beglen));
				end += endlen;
			}
			else
				break;
		}
		
		return true;
	}

其實,toupper和tolower可以這樣寫:
std::string& toupper(std::string& s)
{
	typedef std::string::iterator SIT;
	for (SIT it = s.begin(); it != s.end(); ++it)
	{
		if (*it >= 'a' && *it <= 'z')
		{
			*it += 'A' - 'a';
		}
	}
	return s;
}
	
std::string& tolower(std::string& s)
{
	typedef std::string::iterator SIT;
	for (SIT it = s.begin(); it != s.end(); ++it)
	{
		if (*it >= 'A' && *it <= 'Z')
		{
			*it += 'a' - 'A';
		}
	}
	return s;
}

上面是關于字符串的。其他的慢慢再帖……賣個關子先
呵呵……
posted on 2006-09-14 15:53 子彈のVISIONS 閱讀(1292) 評論(6)  編輯 收藏 引用

Feedback

# re: [ 子彈的工具箱 ] 之 String 類 2006-09-14 16:15 shaker
注釋下吧 這么簡單的代碼 還要別人去看代碼理解這個函數 實在是有點說不過去  回復  更多評論
  

# re: [ 子彈的工具箱 ] 之 String 類 2006-09-14 16:40 子彈
@shaker

你說得對……
嗯。為了免得大家浪費時間,在聲明的地方加了注釋。

:)

歡迎討論  回復  更多評論
  

# re: [ 子彈的工具箱 ] 之 String 類 2006-09-15 08:50 漂舟
寫得不錯 ! 支持作者無私的精神 !
代碼中頻繁使用 std::string ,
當然,你使用的typedef也解決了一部分。
我覺得可否在實現的局部文件使用
using namespace std::string,
避免代碼看起來肥大。

在下愚見。  回復  更多評論
  

# re: [ 子彈的工具箱 ] 之 String 類 2006-09-17 16:39 Francis Arcanum
這個有很多現成的,不需要自己寫  回復  更多評論
  

# re: [ 子彈的工具箱 ] 之 String 類 2006-11-08 10:33 cat
你的trim等對如果對中文或者日文雙字節字符可能會出問題哦。  回復  更多評論
  

# re: [ 子彈的工具箱 ] 之 String 類 2006-11-15 10:45 子彈
@cat

雙字節字符串用wstring和locale配合進行處理  回復  更多評論
  


只有注冊用戶登錄后才能發表評論。
網站導航: 博客園   IT新聞   BlogJava   博問   Chat2DB   管理


青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            亚洲精品乱码久久久久久日本蜜臀| 久久er99精品| 亚洲欧美日韩在线观看a三区| 亚洲风情亚aⅴ在线发布| 国产视频精品网| 国产欧美日韩精品a在线观看| 国产精品亚洲аv天堂网| 国产乱码精品一区二区三区忘忧草| 欧美亚州在线观看| 国产精品一区一区三区| 国语自产精品视频在线看一大j8 | 亚洲一区二区三区四区中文 | 亚洲国产高清高潮精品美女| 久久gogo国模裸体人体| 久久国产精品毛片| 蜜臀a∨国产成人精品| 亚洲第一精品夜夜躁人人爽| 亚洲精品系列| 午夜在线成人av| 免费观看日韩| 国产精品亚洲一区| 有码中文亚洲精品| 亚洲一区成人| 美女视频网站黄色亚洲| 亚洲精品日韩在线观看| 欧美亚洲日本国产| 欧美日产国产成人免费图片| 国产小视频国产精品| 亚洲精品欧美日韩| 久久精品99| 99成人精品| 蜜臀久久99精品久久久久久9| 欧美日韩国产高清| 亚洲一区二区三区色| 国产精品家教| 国产一区深夜福利| 在线一区观看| 欧美福利视频网站| 亚洲欧美电影院| 欧美日韩国产一区二区三区地区| 国产精品自拍视频| 一区二区动漫| 欧美成人在线免费观看| 亚洲一区激情| 欧美日韩卡一卡二| 亚洲欧洲综合另类| 久久免费视频一区| 亚洲视频电影图片偷拍一区| 欧美成人免费视频| 亚洲国产另类久久精品| 久久国产手机看片| 亚洲欧美日韩一区二区| 欧美人成在线视频| 亚洲久久一区二区| 欧美电影资源| 午夜精品一区二区三区在线视| 亚洲一级影院| 亚洲精品久久嫩草网站秘色 | 麻豆久久精品| 欧美成人精品福利| 亚洲一区国产视频| 美日韩在线观看| 午夜一区二区三视频在线观看 | 午夜在线精品偷拍| 久久爱www久久做| 亚洲欧美综合国产精品一区| 久久精品欧美日韩| 黄色综合网站| 久久久久在线观看| 欧美在线视频一区二区| 国产亚洲一区二区在线观看| 欧美在线综合| 久久精品国产欧美激情| 极品裸体白嫩激情啪啪国产精品 | 久久gogo国模裸体人体| 亚洲视频一二三| 国产欧美va欧美va香蕉在| 欧美日韩久久精品| 日韩一区二区精品视频| 亚洲人成精品久久久久| 欧美女同视频| 亚洲欧美在线x视频| 欧美亚洲在线视频| 亚洲第一区在线观看| 亚洲国产经典视频| 欧美日韩国语| 久久国产日韩欧美| 蜜桃伊人久久| 亚洲欧美国产日韩天堂区| 欧美一区二区三区在线看| 极品中文字幕一区| 亚洲欧洲偷拍精品| 国产精品视频一区二区高潮| 久久综合国产精品| 欧美精品一区二区蜜臀亚洲| 亚洲欧美区自拍先锋| 久久精品理论片| 一本久久a久久免费精品不卡| 亚洲一区精品电影| 亚洲欧洲一区二区在线观看| 亚洲一区二区免费在线| 在线观看一区欧美| 亚洲一区在线免费| 亚洲美女色禁图| 欧美在线一二三四区| 一区二区三区黄色| 久久久999精品视频| av成人手机在线| 久久国产夜色精品鲁鲁99| 一本大道久久a久久精品综合| 欧美在线观看视频一区二区| 夜夜嗨av一区二区三区网页| 欧美一区二区女人| 亚洲视频 欧洲视频| 久久裸体艺术| 欧美一乱一性一交一视频| 欧美成人午夜视频| 久久在线视频在线| 国产欧美日韩一区二区三区在线观看 | 欧美亚洲成人免费| 欧美高清视频在线播放| 国产欧美精品一区二区三区介绍 | 国产精品欧美激情| 亚洲人体影院| 亚洲国产精品毛片| 久久午夜视频| 久久免费视频网站| 国产一区自拍视频| 欧美在线视频日韩| 欧美一区二区三区免费观看| 欧美视频一区二区三区| 91久久嫩草影院一区二区| 亚洲欧洲一区二区三区| 蜜月aⅴ免费一区二区三区| 另类成人小视频在线| 国产在线日韩| 欧美一区二区三区成人| 久久av一区二区| 国产日本欧美视频| 久久精品亚洲| 国内久久精品视频| 久久福利资源站| 久久精品伊人| 国语精品中文字幕| 久久久青草青青国产亚洲免观| 久久精品国产视频| 国内精品视频666| 久久―日本道色综合久久| 米奇777在线欧美播放| 曰韩精品一区二区| 欧美r片在线| 99国产精品国产精品久久| 亚洲欧美成人一区二区在线电影 | 欧美国产视频一区二区| 亚洲精品久久久久久下一站| 欧美黄色免费| 99热免费精品在线观看| 亚洲视频在线看| 国产精品丝袜白浆摸在线| 欧美一区高清| 欧美成人精品h版在线观看| 最新国产の精品合集bt伙计| 欧美人成在线视频| 性欧美暴力猛交另类hd| 欧美黑人多人双交| 亚洲视频在线一区| 国产专区欧美专区| 免费一级欧美片在线观看| 日韩视频―中文字幕| 欧美在线观看视频一区二区三区| 韩国av一区| 欧美日韩一二区| 久久狠狠亚洲综合| 亚洲精品一区二区三区婷婷月 | 欧美成人黑人xx视频免费观看| 亚洲日本黄色| 国产精品日韩久久久| 裸体丰满少妇做受久久99精品| 亚洲三级影片| 久久久久国产精品一区三寸| 日韩图片一区| 国产日韩欧美视频| 欧美精品一区二区精品网| 久久丁香综合五月国产三级网站| 亚洲国产视频a| 久久久久久久高潮| 亚洲一区二区3| 亚洲人妖在线| 激情懂色av一区av二区av| 国产精品久久激情| 欧美激情1区2区3区| 久久av老司机精品网站导航| 亚洲深夜av| 亚洲精品乱码久久久久久蜜桃91| 老司机aⅴ在线精品导航| 亚洲一区亚洲二区| 亚洲精品社区| 久久亚洲一区| 先锋影音国产精品| 中文在线资源观看网站视频免费不卡|