Февраль 27th, 2011 § § Прямая ссылка
Бывает нужно что либо отчекать в сети и вот у тебя есть много акков две функции, который тебе в этом помогут. Функция replaceAll нужна если не уверен что разделитель будет один, если же такая уверенность есть, то она и не нужна.
struct loginpass
{
string login;
string pass;
}
string& replaceAll(string& context, const string& from, const string& to)
{
size_t lookHere = 0;
size_t foundHere;
while((foundHere = context.find(from, lookHere)) != string::npos)
{
context.replace(foundHere, from.size(), to);
lookHere = foundHere + to.size();
}
return context;
}
bool GetLoginPass(string& data,loginpass& ids)
{
size_t nPos;
replaceAll(data,";",":");
nPos=data.find(":");
if(string::npos==nPos)
return false;
ids.login=data.substr(0,nPos);
ids.pass=data.substr(nPos+1,data.size());
return true;
}
Февраль 25th, 2011 § § Прямая ссылка
Как -то давно требовалось долго искал, в результате нашел так что забирайте.
string char2hex( char dec )
{
char dig1 = (dec&0xF0)>>4;
char dig2 = (dec&0x0F);
if ( 0<= dig1 && dig1<= 9) dig1+=48; //0,48inascii
if (10<= dig1 && dig1<=15) dig1+=97-10; //a,97inascii
if ( 0<= dig2 && dig2<= 9) dig2+=48;
if (10<= dig2 && dig2<=15) dig2+=97-10;
string r;
r.append( &dig1, 1);
r.append( &dig2, 1);
return r;
}
string urlencode(const string &c)
{
string escaped="";
int max = c.length();
for(int i=0; i<max; i++)
{
if ( (48 <= c[i] && c[i] <= 57) ||//0-9
(65 <= c[i] && c[i] <= 90) ||//abc...xyz
(97 <= c[i] && c[i] <= 122) || //ABC...XYZ
(c[i]=='~' || c[i]=='!' || c[i]=='*' || c[i]=='(' || c[i]==')' || c[i]=='\'')
)
{
escaped.append( &c[i], 1);
}
else
{
escaped.append("%");
escaped.append( char2hex(c[i]) );//converts char 255 to string "ff"
}
}
return escaped;
}
string urldecode(const string &c)
{
string buffer = "";
int len = c.length();
for (int i = 0; i < len; i++) {
int j = i ;
char ch = s.at(j);
if (ch == '%'){
char tmpstr[] = "0x0__";
int chnum;
tmpstr[3] = c.at(j+1);
tmpstr[4] = c.at(j+2);
chnum = strtol(tmpstr, NULL, 16);
buffer += chnum;
i += 2;
} else {
buffer += ch;
}
}
return buffer;
}
Февраль 25th, 2011 § § Прямая ссылка
Довольно долго я увлекался PHP и находил способ работы со строками очень удобным, так что вот немного функция для работы с stl строками в духе PHP
vector<string> explode(string& str, string separator)
{
vector<string> results;
int found;
found = str.find_first_of(separator);
while(found != string::npos){
if(found > 0){
results.push_back(str.substr(0,found));
}
str = str.substr(found+1);
found = str.find_first_of(separator);
}
if(str.length() > 0){
results.push_back(str);
}
return results;
}
аналог explode в PHP, первый параметр строка, второй разделитель, на выходе получаем vector строк.
Continue reading “Принесем немного PHP в C++” »
Февраль 25th, 2011 § § Прямая ссылка
Немного о строках часто возникает ситуация, когда нужно удалить с обоих концов строки все пробельные символы и символы переноса строки, это можно сделать вот таким не замысловатым способом.
void trim(string& s, char* t = " \t\n\r\f\v")
{
s.erase(0, s.find_first_not_of(t));
s.erase(s.find_last_not_of(t) + 1);
}