C++の下でいくつかのよく使う操作の実現

2908 ワード

stringの文字列置換操作(最初に一致)
string strFirstReplace(const string & src, const string & pattern, const string & rep)
{
	string ret = "";
	
	int pos = src.find(pattern);
	if (pos != string::npos)
	{
		if (pos + pattern.length() < src.length())
		{
			ret = src.substr(0, pos) + rep + src.substr(pos + pattern.length());
		}
		else
		{
			ret = src.substr(0, pos) + rep;
		}
	}
	return ret;
}

stringのsplit操作
void strSplit(const string& src, const string &separate_character, vector<string> &strs)
{
	int separate_characterLen = separate_character.size();
	int lastPosition = 0, index = -1;
	while (-1 != (index = src.find(separate_character, lastPosition)))
	{
		strs.push_back(src.substr(lastPosition, index - lastPosition));
		lastPosition = index + separate_characterLen;
	}
	string lastString = src.substr(lastPosition);
	if (!lastString.empty())
		strs.push_back(lastString);
}

intタイプを一定長string文字列に変換する
ヘッダファイルを含める必要があります(#include)
string fixedLengthInt2str(const int i, const int length)
{
	ostringstream oss;
	if (i < 0)
	{
		oss << '-1';
	}

	oss << setfill('0') << setw(length) << (i < 0 ? -i : i);

	return oss.str();
}

ファイルが存在するかどうかを判断する
ヘッダファイルを含める必要があります(#include)
bool fileExists(string filename)
{
	struct stat fileInfo;
	return stat(filename.c_str(), &fileInfo) == 0;
}

ディレクトリの下にあるすべてのファイルを読み込みます(Windows)
Windowsが持参したwin 32 APIを利用します.もっと参考にしてくださいhttp://stackoverflow.com/questions/612097/how-can-i-get-a-list-of-files-in-a-directory-using-c-or-c
void list_dir(const string & path, vector<string> & files)
{
	WIN32_FIND_DATA fd;

	HANDLE hFind = ::FindFirstFile(path.c_str(), &fd);
	if (hFind != INVALID_HANDLE_VALUE)
	{
		do
		{
			// filtering directory and hidden file
			if (!(fd.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) &&
				!(fd.dwFileAttributes & FILE_ATTRIBUTE_HIDDEN))
			{

				files.push_back(fd.cFileName);
			}
		} while (::FindNextFile(hFind, &fd));
	}
	else
	{
		cout << "Error: cannot find the first file!" << endl;
	}
	FindClose(hFind);
}

ディレクトリの下にあるすべてのファイルを読み込みます(Linux)
linuxの「dirent.h」ヘッダファイル(https://stackoverflow.com/questions/4204666/how-to-list-files-in-a-directory-in-a-c-program)
void list_dir(const string & path, vector<string> & files)
{
    DIR * dir = NULL;
    struct dirent * dir_node = NULL;
    dir = opendir(path.c_str());
    if(dir != NULL)
    {
        while((dir_node = readdir(dir)) != NULL)
        {
            files.push_back(dir_node->d_name);
        }
        closedir(dir);
    }
}