Разделим акки

Февраль 27th, 2011 § 0 comments § Прямая ссылка

Бывает нужно что либо отчекать в сети и вот у тебя есть много акков две функции, который тебе в этом помогут. Функция 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;

}

С++ base64 encode decode

Февраль 25th, 2011 § 0 comments § Прямая ссылка

Как -то давно требовалось долго искал, в результате нашел так что забирайте.


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;
}

Принесем немного PHP в C++

Февраль 25th, 2011 § 0 comments § Прямая ссылка

Довольно долго я увлекался 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++” »

STL string trim

Февраль 25th, 2011 § 0 comments § Прямая ссылка

Немного о строках часто возникает ситуация, когда нужно удалить с обоих концов строки все пробельные символы и символы переноса строки, это можно сделать вот таким не замысловатым способом.


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);
}

Смотреть фильмы онлайн