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

子彈 の 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>
            精品不卡在线| 欧美日韩大片| 久久精品一区二区国产| 欧美日韩综合一区| 亚洲高清资源| 免费短视频成人日韩| 亚洲欧美日韩一区在线| 这里是久久伊人| 欧美色另类天堂2015| 亚洲精品中文字幕女同| 久久久另类综合| 亚洲欧美电影在线观看| 国产伦精品一区二区三区在线观看 | 一区二区三区日韩精品| 欧美国产精品v| 久久精品一区二区国产| 尹人成人综合网| 国产精品一区一区| 亚洲专区国产精品| 亚洲欧洲视频| 久久综合999| 在线播放国产一区中文字幕剧情欧美| 亚洲一区日韩在线| 日韩午夜在线观看视频| 国产精品老牛| 欧美在线观看一二区| 午夜一级久久| 在线日韩一区二区| 亚洲激情女人| 国产精品久在线观看| 香蕉尹人综合在线观看| 亚洲欧美日韩精品一区二区| 国产日韩欧美电影在线观看| 久久视频一区| 女生裸体视频一区二区三区| 欧美不卡一区| 亚洲欧美国产视频| 欧美在线视屏| 亚洲国产裸拍裸体视频在线观看乱了中文 | 在线视频免费在线观看一区二区| 久久日韩粉嫩一区二区三区| 欧美中文字幕视频| 黑人一区二区三区四区五区| 亚洲成色精品| 国产毛片一区二区| 久久夜精品va视频免费观看| 美日韩精品免费观看视频| 中文高清一区| 久久久人成影片一区二区三区观看| 亚洲精品在线视频| 亚洲一区二区三区四区视频| 亚洲福利久久| 一区二区三区视频在线观看 | 狠狠色丁香久久婷婷综合_中| 亚洲第一久久影院| 欧美香蕉视频| 欧美不卡福利| 国产乱码精品一区二区三区av| 麻豆视频一区二区| 欧美网站在线| 亚洲电影自拍| 国产日韩精品入口| 一片黄亚洲嫩模| 亚洲精品男同| 久久精品人人做人人综合| 亚洲无线视频| 欧美成人精品激情在线观看| 久久www免费人成看片高清| 欧美精品首页| 亚洲高清免费| 激情欧美一区| 亚洲欧美激情四射在线日| 99视频在线观看一区三区| 久久久亚洲综合| 欧美在线视频二区| 欧美视频在线观看免费| 亚洲国产精品久久久久秋霞不卡| 韩国精品在线观看| 欧美中文字幕第一页| 久久aⅴ国产紧身牛仔裤| 欧美日韩美女在线| 亚洲激情第一区| 亚洲人成在线播放网站岛国| 久久久久成人网| 久久综合伊人77777| 国产一区二区剧情av在线| 亚洲一区二区精品视频| 午夜久久影院| 国产视频一区欧美| 亚洲欧美国产日韩天堂区| 性欧美18~19sex高清播放| 国产精品电影在线观看| 亚洲视频自拍偷拍| 午夜精品久久久久久久久 | 中国av一区| 欧美另类高清视频在线| 最新亚洲激情| 亚洲小说欧美另类社区| 国产精品激情av在线播放| 一区二区三区国产精华| 亚洲欧美日韩成人高清在线一区| 欧美午夜在线视频| 亚洲欧美在线免费| 久久精品国产久精国产爱| 香蕉久久一区二区不卡无毒影院 | 国产精品第三页| 亚洲一区高清| 久久久久网址| 亚洲激情欧美激情| 欧美日韩黄色一区二区| 一本色道久久88综合亚洲精品ⅰ| 亚洲一区在线观看免费观看电影高清 | 欧美日韩国产成人在线免费| 夜夜嗨av一区二区三区四季av| 亚洲女人小视频在线观看| 国产欧美日韩在线观看| 久久久久国产精品厨房| 亚洲高清不卡在线| 午夜久久久久| 亚洲欧洲一区二区在线播放| 欧美三级在线播放| 久久久久久久波多野高潮日日| 亚洲高清不卡在线观看| 亚洲欧美日韩系列| 在线观看精品视频| 欧美视频免费在线观看| 久久九九免费视频| 亚洲麻豆av| 久久综合久久综合久久综合| 一区二区av在线| 激情欧美亚洲| 国产精品久久久久久福利一牛影视| 久久久久久一区二区| 亚洲天堂av在线免费观看| 欧美成人自拍视频| 欧美一区二区在线播放| 日韩视频永久免费观看| 国产一区日韩一区| 欧美午夜久久久| 免费观看成人鲁鲁鲁鲁鲁视频| 在线视频日韩| 亚洲国产婷婷香蕉久久久久久| 欧美一区91| 99精品视频免费全部在线| 韩国福利一区| 国产精品久久久91| 欧美高清自拍一区| 久久久精品午夜少妇| 亚洲少妇中出一区| 亚洲精品久久久久久一区二区| 久久亚洲午夜电影| 欧美在线关看| 午夜久久美女| 亚洲一区二区三区涩| 亚洲国产日韩欧美| 精品51国产黑色丝袜高跟鞋| 国产精品成人播放| 欧美日韩亚洲一区二区三区四区| 久久精品国产久精国产一老狼 | 久久亚洲精品一区| 亚洲欧美在线一区| 亚洲免费婷婷| 亚洲视频狠狠| 一区二区三区av| 日韩一区二区精品在线观看| 欧美va亚洲va国产综合| 久久久久国产一区二区三区| 销魂美女一区二区三区视频在线| 在线综合亚洲欧美在线视频| av成人国产| 欧美日韩综合不卡| 欧美三级电影精品| 欧美视频日韩| 国产精品成人观看视频免费| 国产精品福利在线| 国产精品久久久久久久7电影| 欧美日韩在线视频首页| 国产精品v欧美精品v日韩| 国产精品久久久久av| 国产精品人成在线观看免费| 国产精品永久免费在线| 国产日产高清欧美一区二区三区| 国产婷婷色综合av蜜臀av| 国内久久精品| 在线视频成人| 日韩午夜精品视频| 亚洲一线二线三线久久久| 午夜精品在线观看| 美女诱惑一区| 亚洲人成网站999久久久综合| 日韩午夜在线视频| 亚洲欧美电影在线观看| 久久精品夜色噜噜亚洲aⅴ| 久久午夜国产精品| 欧美国产极速在线| 欧美日韩一级大片网址| 国产精自产拍久久久久久蜜| 黄色成人在线免费| 99热这里只有精品8| 午夜亚洲福利|