[Windowsプログラミング]スプリットCString文字列



Split Cstring String



szBranches文字列をスペースで分割すると、分割された文字列メモリが「0a」で終わっていることがわかりました。 Baiduは、「0a」が改行文字を表すことを発見しました。兄に相談したところ、理由がわかりました〜えーと。実際、これは非常に簡単です。簡単な質問は、私がzz ...この低レベルのエラーの理由を考えたということです。理由の1つは、私が毎日愚かであるということです:)、2番目の理由は、デバッグ時に文字列にだまされたということです... szBranches文字列は次のようになりました:



上図のように一見「11スペース12…」の形をしているように感じますが、OutPutウィンドウに文字列を出力すると、文字列が分割されていることがはっきりとわかります。 ' n'によって




私は分割線です、以下は分割文字列の一部です


文字列を11、12、dev1、およびhhに分割するには、メソッドは非常に簡単です。まず、CStringのremove関数を使用して、文字列の*とスペースを削除します。

strSrc.Remove('*') strSrc.Remove(' ')

次に、文字列を「 n」文字で分割します最後に、セグメンテーション結果がstrResultにロードされます。



strGap = _T(' ') NPos = strSrc.Find(strGap) // Get the index of the ‘ ’ character in the original character while(0 <= nPos) { CString strLeft = strSrc.Left(nPos) // Get the string to the left of nPos if (!strLeft.IsEmpty()) strResult.Add(strLeft) // Get nCount characters from right to left starting from right 1 strSrc = strSrc.Right(strSrc.GetLength() - nPos - 1) nPos = strSrc.Find(strGap) }

完全な分割機能は次のとおりです。

void SplitCString(CString strSrc, CString strGap, CStringArray & strResult) { strSrc.Remove('*') strSrc.Remove(' ') nPos = strSrc.Find(strGap) CString strLeft = _T('') while(0 <= nPos) { strLeft = strSrc.Left(nPos) if (!strLeft.IsEmpty()) strResult.Add(strLeft) strSrc = strSrc.Right(strSrc.GetLength() - nPos - 1) nPos = strSrc.Find(strGap) } }

PS:CStringArrayを返さないでください。問題が発生する可能性があるため、ここでは、返される結果が参照パラメーターとして渡されます。

(お役に立てれば、お褒めの言葉をお願いします〜ありがとうdφ(>ω<*))