hi, some basic help i need here or not (=
1. i need to replace every "\4" word with 04 hex byte
2. i need to replace every "a" symbol with "b" symbol after "\r" word but not after "\e" word,
replace "a" symbol with "b" symbol just until there is a "\e" word, after "\e" no replaceing "a" symbol with "b" symbol, but if there is an "\r" somewhere after "\e" - so replace
hope you help me ^^"
how to find and replace some group of characters in a char string with bytes? *basic
|
Newbie Member
|
|
| 12May2009,01:57 | #1 |
|
Mentor
|
![]() |
| 12May2009,13:17 | #2 |
|
Sounds fairly easy. How far have you got and where are you stuck?
I would implement this using a flag to track whether or not a "\e" (whatever that is) has occurred and replace "a" with "b" only if that flag is set. Also I'd use a counter for the first part and reset it every time I did a substitution. IOW, something like: Code:
flag=1 counter=0 get symbol counter++ if counter=4 symbol=04 hex byte (whatever that means) reset counter end if if symbol="\e" flag=0 else if symbol="\r" flag=1 else if symbol="a" and flag=1 symbol="b" end if |
|
Newbie Member
|
|
| 12May2009,15:25 | #3 |
|
hex i mean... like this +_+ *look attach
every "\4" should be replaced with 04 hex byte no matter about other things Quote:
i'm new at C++ but looping thru symbols and replaceing them looks easy (at least with my knowlegde of PAWN) but i think i'm stuck with condition of replacing and not replaceing if markers were found like i need to mark string from \r to \e (if \e is after, + even if it's not) to replace things and mark string from \e to \r (if \r is after, + even if it's not) to not replace i heard C++ has enchanced abilities to work with strings such way but i'm not sure |
|
Mentor
|
![]() |
| 12May2009,20:15 | #4 |
|
What exactly do you mean by a symbol? How many of them can you see on the highlighted line in the screen shot?
Is there a \4 on the screenshot, and if not could you post a screen shot that shows one? |
|
Newbie Member
|
|
| 12May2009,21:38 | #5 |
|
a symbol, a character, a letter
anyway i think i found how to write bytes Code:
data.push_back(0x04); |
|
Newbie Member
|
|
| 12May2009,23:34 | #6 |
|
output for text from test string is "bbcdefbbcdefabcdef"
when i use for input "hi" it outputs " . hi" (20 2E 14 20 68 69 in hex) and it conver every a to b, and when i input "\\s" it outputs either "sss" or "s\s" O_o can you look at my code and maybe tell me something how to fix it? Code:
// Modifier functor.
struct Modify : public std::unary_function<char, void>
{
// Constructor.
Modify() : slash(false), a_to_b(true)
{
}
// () operator.
void operator () (char c)
{
// Did we gat a '\' last time?
if (slash)
{
// Enable 'a' to 'b'
if (c == 'r')
{
a_to_b = true;
}
// Disable 'a' to 'b'
else if (c == 'e')
{
a_to_b = false;
}
// It was a '4'
else if (c == '4')
{
data.push_back(0x04);
}
// Done with the '\'
slash = false;
}
else
{
// Is the current character a '\' ?
slash = (c == '\\');
if (!slash)
{
if ((c == 'a') && a_to_b)
{
// Modify 'a' to 'b'
data.push_back('b');
}
else
{
// Just copy
data.push_back(c);
}
}
}
}
// Result.
std::vector<char> data;
private:
// Flags.
bool slash;
bool a_to_b;
};
void func_xsay()
{
char msg[384];
for(int i=1; i < args; i++)
{
sprintf(msg,"%s %s",msg,oEngfuncs.Cmd_Argv(i));
}
// Test string
std::string text("abcdef\\rabc\\4def\\eabcdef\\4");
//text = msg;
// Make the data.
std::vector<char> data(text.begin(), text.end());
// Create the functor.
Modify modify;
// Run the functor over all the data.
modify = std::for_each(data.begin(), data.end(), modify);
// Read back the modified data.
data = modify.data;
//make msg = data;
for (int i = 0; i < data.size(); i++)
{
msg[i] = data[i];
}
wsprintf(cmd,"you say %s",msg);
}
|

