strtok и заменить подстроку в C ++ - PullRequest
1 голос
/ 14 ноября 2008

Если у меня есть строка "12 23 34 56"

Какой самый простой способ изменить его на "\ x12 \ x23 \ x34 \ x56"?

Ответы [ 3 ]

2 голосов
/ 14 ноября 2008

Ваш вопрос неоднозначен, это зависит от того, что вы на самом деле хотите:

, если вы хотите, чтобы результат был таким же, как: char s [] = {0x12, 0x34, 0x56, 0x78, '\ 0'}: тогда вы можете сделать это:

std::string s;
int val;
std::stringstream ss("12 34 56 78");
while(ss >> std::hex >> val) {
   s += static_cast<char>(val);
}

после этого вы можете проверить это с помощью:

for(int i = 0; i < s.length(); ++i) {
    printf("%02x\n", s[i] & 0xff);
}

который напечатает:

12
34
56
78

в противном случае, если вы хотите, чтобы ваша строка была буквально "\ x12 \ x23 \ x34 \ x56", вы можете сделать то, что предложил Джесси Бедер.

2 голосов
/ 14 ноября 2008
string s = "12 23 34 45";
stringstream str(s), out;
int val;
while(str >> val)
    out << "\\x" << val << " "; // note: this puts an extra space at the very end also
                               //       you could hack that away if you want

// here's your new string
string modified = out.str();
0 голосов
/ 14 ноября 2008

Вы можете сделать это так:

foreach( character in source string)
{
  if 
    character is ' ', write ' \x' to destination string
  else 
    write character to destination string.
}

Я предлагаю использовать std :: string, но это можно легко сделать, сначала проверив строку, чтобы подсчитать, сколько пробелов, а затем создайте новую целевую строку, равную этому числу x3.

...