std::wstring中の改行コードを好きな文字列に変換します。この関数を利用して統一されていない改行コードを1種類に統一することもできます。
#include <stdio.h> #include <tchar.h> #include <iostream> #include <string> /* 改行コードを変換する(wstring) "¥r¥n", "¥r", "¥n", "¥n¥r"の4種類に対応しています。 */ std::wstring ConvertCRLF ( std::wstring strString // 変換対象の文字列 , std::wstring strCRLF // 改行コードを変換したい文字列("¥n"など) ) { std::wstring strRet; std::wstring::iterator ite = strString.begin(); std::wstring::iterator iteEnd = strString.end(); if (0 < strString.size()) { wchar_t wNextChar = *ite++; while (1) { if ('¥r' == wNextChar) { // 改行確定 strRet += strCRLF; // EOF判定 if (ite == iteEnd) { break; } // 1文字取得 wNextChar = *ite++; if ('¥n' == wNextChar) { // EOF判定 if (ite == iteEnd) { break; } // 1文字取得 wNextChar = *ite++; } } else if ('¥n' == wNextChar) { // 改行確定 strRet += strCRLF; // EOF判定 if (ite == iteEnd) { break; } // 1文字取得 wNextChar = *ite++; if ('¥r' == wNextChar) { // EOF判定 if (ite == iteEnd) { break; } // 1文字取得 wNextChar = *ite++; } } else { // 改行以外 strRet += wNextChar; // EOF判定 if (ite == iteEnd) { break; } // 1文字取得 wNextChar = *ite++; } }; } return(strRet); } /* stringの改行コードを統一する */ int _tmain ( int argc , _TCHAR* argv[] ) { /* std::wcoutのロケールを設定 これを設定するだけで、std::wcoutで日本語が表示される ようになります。 */ std::wcout.imbue( std::locale( "", std::locale::ctype ) ); // 変換対象の文字列 std::wstring strText = L"1行目¥r¥n2行目¥n3行目¥n¥r4行目¥r"; // 改行コードを変換します。 std::wstring strResult = ConvertCRLF( strText, L"●" ); // 変換結果を表示 std::wcout << strResult.c_str() << std::endl; // 改行コードを変換します。(このようにすると改行コードを"¥n"に統一する事もできます。) strResult = ConvertCRLF( strText, L"¥n" ); // 変換結果を表示 std::wcout << strResult.c_str() << std::endl; // 正常終了 return( 0 ); }
1行目●2行目●3行目●4行目● 1行目 2行目 3行目 4行目