Pythonについて何も知らない場合はお詫びしますが、次のスニペットは誰でも非常に読みやすいはずです。注意すべき唯一のトリック-リストにインデックスを[-1]
付けると、最後の要素がある場合はそれが得られるか、例外が発生します。
>>> fileName = 'TheFileName.Something.xMl'
>>> fileNameList = fileName.split('.')
>>> assert(len(fileNameList) > 1) # Must have at least one period in it
>>> assert(fileNameList[-1].lower() == 'xml')
>>> fileNameList[-1] = 'bak'
>>> fileName = '.'.join(fileNameList)
>>> print(fileName)
TheFileName.Something.bak
このロジックを、次の署名を使用してC ++(実際に使用している言語ですが、これまでのところうまくいきません)関数に変換する必要がありますvoid PopulateBackupFileNameOrDie(CAtlString& strBackupFileName, CAtlString& strXmlFileName);
。strXmlFileName
これが「入力」、strBackupFileName
「出力」です(2つの操作を逆にする必要がありますか?)。トリッキーな部分は、(間違っている場合は訂正してください)Unicode文字列を使用しているため、これらの文字を探すの.xmlXML
は簡単ではありません。最新のPythonにはこれらの問題はありません。これは、'.'
とが両方とも長さ1の"."
Unicode文字列(タイプではない)であり、どちらもドットのみを含んでいるためです。"char"
戻りタイプがvoid
-であることに注意してください-それについてはあまり心配しないでください。エラーをユーザーに通知する方法の詳細については、退屈させたくありません。Pythonの例では、アサーションを使用しました。そのようなことをするか、のようなコメントを含めることができます// ERROR: [REASON]
。
不明な点がないかお尋ねください。std::string
関数パラメーターの代わりになどを使用するための提案はCAtlString
、私が探しているものではありません。必要に応じて関数内で変換することもできますが、1つの関数に異なる文字列タイプを混在させたくないと思います。VS2010を使用して、このC++をWindowsでコンパイルしています。これは、私がインストールしないことBOOST
、QTString
または箱から出して利用できない他のライブラリを意味します。魔法を有効にするためにまたは他のヘッダーを盗むことboost
も正しい解決策ではありません。
ありがとう。