-2

文字列 AB C が 1 つあります。C++ でスペースをアンダースコア (_) に置き換える必要があります。perlやjavaにあるような機能はありますか?

入力:

   char* string =  "A B C" 

出力

    A_B_C
4

4 に答える 4

7

があるstd::replace

#include <algorithm>
...
std::replace (s.begin(), s.end(), ' ', '_');
于 2013-03-07T08:33:51.513 に答える
4

std::replace機能あり

std::replace( s.begin(), s.end(), 'x', 'y'); // replace all 'x' to 'y'
于 2013-03-07T08:33:56.493 に答える
4

はい、std::replace()定義されてい<algorithm>ます:

#include <algorithm>
#include <string>

int main() {
  std::string input("A B C");
  std::replace(input.begin(), input.end(), ' ', '_');
}
于 2013-03-07T08:34:39.917 に答える
2

同等のreplaceメンバー関数はありません。

最初searchにスペースを取得してから使用する必要がありますstd::string::replace

char *string = "A B C";
std::string s(string);
size_t pos = s.find(' ');
if (pos != std::string::npos)
    s.replace(pos, 1, "_");

だけでchar*、最初に a に入れてからstd::string、ここで答えの 1 つを適用します。

std::stringメソッドをstd::string完全に避けたい場合はstd::replace、他の回答が既に提案したように使用してください

std::replace(string, string + strlen(string), ' ', '_');

または、文字列の長さがすでにわかっている場合

std::replace(string, string + len, ' ', '_');

ただし、定数文字列リテラルは変更できないことに注意してください。

手動で行う場合は、スタイル

static inline void manual_c_string_replace(char *s, char from, char to)
{
    for (; *s != 0; ++s)
        if (*s == from)
            *s = to;
}
于 2013-03-07T08:38:19.923 に答える