Home » Archives for 2011-08-14
vi/vim cheat sheet
11:16 PM Sayef Azad Sakin
Cursor movement
- h - move left
- j - move down
- k - move up
- l - move right
- w - jump by start of words (punctuation considered words)
- W - jump by words (spaces separate words)
- e - jump to end of words (punctuation considered words)
- E - jump to end of words (no punctuation)
- b - jump backward by words (punctuation considered words)
- B - jump backward by words (no punctuation)
- 0 - (zero) start of line
- ^ - first non-blank character of line
- $ - end of line
- G - Go To command (prefix with number - 5G goes to line 5)
Note: Prefix a cursor movement command with a number to repeat it. For example, 4j moves down 4 lines.
Insert Mode - Inserting/Appending text
- i - start insert mode at cursor
- I - insert at the beginning of the line
- a - append after the cursor
- A - append at the end of the line
- o - open (append) blank line below current line (no need to press return)
- O - open blank line above current line
- ea - append at end of word
- Esc - exit insert mode
Editing
- r - replace a single character (does not use insert mode)
- J - join line below to the current one
- cc - change (replace) an entire line
- cw - change (replace) to the end of word
- c$ - change (replace) to the end of line
- s - delete character at cursor and subsitute text
- S - delete line at cursor and substitute text (same as cc)
- xp - transpose two letters (delete and paste, technically)
- u - undo
- . - repeat last command
Marking text (visual mode)
- v - start visual mode, mark lines, then do command (such as y-yank)
- V - start Linewise visual mode
- o - move to other end of marked area
- Ctrl+v - start visual block mode
- O - move to Other corner of block
- aw - mark a word
- ab - a () block (with braces)
- aB - a {} block (with brackets)
- ib - inner () block
- iB - inner {} block
- Esc - exit visual mode
Visual commands
- > - shift right
- < - shift left
- y - yank (copy) marked text
- d - delete marked text
- ~ - switch case
Cut and Paste
- yy - yank (copy) a line
- 2yy - yank 2 lines
- yw - yank word
- y$ - yank to end of line
- p - put (paste) the clipboard after cursor
- P - put (paste) before cursor
- dd - delete (cut) a line
- dw - delete (cut) the current word
- x - delete (cut) current character
Exiting
- :w - write (save) the file, but don't exit
- :wq - write (save) and quit
- :q - quit (fails if anything has changed)
- :q! - quit and throw away changes
Search/Replace
- /pattern - search for pattern
- ?pattern - search backward for pattern
- n - repeat search in same direction
- N - repeat search in opposite direction
- :%s/old/new/g - replace all old with new throughout file
- :%s/old/new/gc - replace all old with new throughout file with confirmations
Working with multiple files
- :e filename - Edit a file in a new buffer
- :bnext (or :bn) - go to next buffer
- :bprev (of :bp) - go to previous buffer
- :bd - delete a buffer (close a file)
- :sp filename - Open a file in a new buffer and split window
- ctrl+ws - Split windows
- ctrl+ww - switch between windows
- ctrl+wq - Quit a window
- ctrl+wv - Split windows vertically
C++ String references with example
11:14 PM Sayef Azad Sakin
constructors 1.
#include <iostream> #include <string> using namespace std; int main () { char *line = "short line for testing"; // with no arguments string s1; s1 = "Anatoliy"; cout << "s1 is: " << s1 << endl; // copy constructor string s2 (s1); cout << "s2 is: " << s2 << endl; // one argumen string s3 (line); cout << "s3 is: " << s3 << endl; // first argumen C string // second number of characters string s4 (line,10); cout << "s4 is: " << s4 << endl; // 1 - C++ string // 2 - start position // 3 - number of characters string s5 (s3,6,4); // copy word 'line' from s3 cout << "s5 is: " << s5 << endl; // 1 - number characters // 2 - character itself string s6 (15,'*'); cout << "s6 is: " << s6 << endl; // 1 - start iterator // 2 - end iterator string s7 (s3.begin(),s3.end()-5); cout << "s7 is: " << s7 << endl; // you can instantiate string with assignment string s8 = "Anatoliy"; cout << "s8 is: " << s8 << endl; return 0; } OUTPUT: // s1 is: Anatoliy // s2 is: Anatoliy // s3 is: short line for testing // s4 is: short line // s5 is: line // s6 is: *************** // s7 is: short line for te // s8 is: Anatoliy getline 1.
/* 1 getline ( intut_stream, str, delim ); Extracts characters from intut_stream and stores them in str until s.max_size() characters have been extracted, the end of file occurs, or delim is encountered, in which case delim is extracted from istr but is not stored in s 2 getline( Iter, str ) Inputs a string value for str as in the preceding func tion with delim = */#include <iostream> #include <string> #include <vector> #include <fstream> using namespace std; int main () { string str; cout << "Enter string (EOL = $) : "; getline (cin, str, '$'); cout << "Str is : " << str << endl; ifstream In("data.dat"); vectorv; cout << endl << "Read data from file" << endl; while ( ! In.eof() ) { getline (In, str); v.push_back(str); } copy (v.begin(),v.end(), ostream_iterator (cout,"\n")); cout << endl; return 0; } OUTPUT: // Enter string (EOL = $) : Str is : first line // second line$ // // Read data from file // file: "data.dat" // second line // last line << >> operators 1.
#include <iostream> #include <string> using namespace std; int main () { string str; cout << "Enter string for testing : "; cin >> str; cout << "\nString is : " << str << endl; cout << "Enter string for testing " << "(d to quit) : "; while ( cin >> str ) { cout << endl; cout << "String is : " << str << endl; cout << "Enter string for testing " << "( d to quit) : "; } return 0; } OUTPUT: // Enter string for testing : first // String is : first // Enter string for testing ( d to quit) : second // String is : second // Enter string for testing ( + += = operators 1.d to quit) : third // String is : third // Enter string for testing ( d to quit) :
#include <iostream> #include <string> using namespace std; int main () { string str = "Hello"; cout << "str is : " << str << endl; str += ","; str += ' '; cout << "str is : " << str << endl; string s; s = str + "World"; cout << "s is : " << s << endl; char ch = '!'; s += ch; cout << "s is : " << s << endl; return 0; } OUTPUT: // str is : Hello // str is : Hello, // s is : Hello, World // s is : Hello, World! append 1.
#include <iostream> #include <string> using namespace std; int main () { string str = "Nobody is perfect"; string s = ""; // empty string char *ch = "abcdef"; // append string str at the end of s; // return s // appends at the end of s a copy of the n characters // in str, starting at position pos; if n is too // large, characters are copied only until the end // of str is reached; // returns s s.append(str,0,6); cout << "s is : " << s << endl; // appends copies of the characters in the range [inpIt1, // inpIt2] to s; returns s string::iterator inpIt1 = str.begin()+6; //start from ' is' string::iterator inpIt2 = str.end(); s.append(inpIt1,inpIt2); cout << "s is : " << s << endl; // appends three ! s.append(3,'!'); cout << "s is : " << s << endl; // appends the first n characters in ch at the end // of s; returns s s.append(ch,3); cout << "s is : " << s << endl; // appends charArray at the end of s; returns s s.append(ch,3); cout << "s is : " << s << endl; return 0; } OUTPUT: // s is : Nobody // s is : Nobody is perfect // s is : Nobody is perfect!!! // s is : Nobody is perfect!!!abc // s is : Nobody is perfect!!!abcabc assign 1.
#include <iostream> #include <string> using namespace std; int main () { string str = "Nobody is perfect"; string s = ""; char *ch = "Robert Frost"; // assigns a copy of str to s; returns s s.assign(str); cout << "s is : " << s << endl; // assigns to s a copy of the n characters in str, start // ing at position 10: if n is too large, characters are // copied only until the end of str is reached: returns s s.assign(str,10,7); // perfect cout << "s is : " << s << endl; // assigns to s a string consisting of the first n charac // ters in ch: returns s s.assign(ch,6); cout << "s is : " << s << endl; // assigns to s a copy of ch: returns s s.assign(ch); cout << "s is : " << s << endl; // assigns to s a string consisting of the characters in // the range str.begin(), str.end(); returns s s.assign(str.begin(),str.end()); cout << "s is : " << s << endl; // assigns to s a string consisting of n copies of ch; // returns s s.assign(17,'*'); cout << "s is : " << s << endl; return 0; } OUTPUT: // s is : Nobody is perfect // s is : perfect // s is : Robert // s is : Robert Frost // s is : Nobody is perfect // s is : ***************** at 1.
// returns s[pos]#include <iostream> #include <string> using namespace std; int main () { string s = "Nobody is perfect"; // Returns s[pos] for ( int pos = 0; pos < s.length(); ++pos ) cout << s.at(pos) << " "; cout << endl; return 0; } OUTPUT: // N o b o d y i s p e r f e c t begin 1.
// Returns an iterator positioned at the // first character in a string#include <iostream> #include <string> using namespace std; int main () { string str = "C++ is best computer language"; string::iterator It = str.begin(); while ( It != str.end() ) { if ( *It == ' ' ) *It = '\n'; cout << *It++; } cout << endl; return 0; } OUTPUT: // C++ // is // best // computer // language c_str 1.
// returns (the base address of) a char // array containing the characters stored in s, // terminated by a null character.#include <iostream> #include <string> using namespace std; int main () { string str = "Anatoliy"; char *ary = new char[str.length()+1]; // strcpy ( ary, str ); that is wrong way strcpy ( ary, str.c_str() ); // that is correct cout << ary << endl; return 0; } OUTPUT: // Anatoliy capacity 1.
// returns the size (of type size_type) // of the storage allocated in string#include <iostream> #include <string> using namespace std; int main () { string str = "C++ is best computer language"; string::size_type cap; cap = str.capacity(); cout << "Capacity of str is: " << cap << endl; cout << "Size of str is : " << str.size() << endl; cout << "Length of str is : " << str.length() << endl; cout << "Resize the str for 50 character" << endl; str.resize(50); cap = str.capacity(); cout << "Capacity of str is: " << cap << endl; cout << "Size of str is : " << str.size() << endl; cout << "Length of str is : " << str.length() << endl; return 0; } OUTPUT: // Capacity of str is: 32 // Size of str is : 29 // Length of str is : 29 // Resize the str for 50 character // Capacity of str is: 64 // Size of str is : 50 // Length of str is : 50 compare 1.
#include <iostream> #include <string> using namespace std; int main () { string str1 = "string"; string str2 = "String"; string str3 = "second string"; char ch[] = "first string"; cout << "string str1 is : " << str1 << endl; cout << "string str2 is : " << str2 << endl; cout << "char ary ch is : " << ch << endl; cout << "string str3 is : " << str3 << endl; cout << endl; // compare str1 and str2 cout << "1." << endl; size_t comp = str1.compare(str2); cout << "String str1 is "; ( comp == 0 ) ? cout << "equal" : cout << "not equal"; cout << " to string str2" << endl; // compare str1 and literal string "string" cout << "2." << endl; comp = str1.compare("string"); cout << "String str1 is "; ( comp == 0 ) ? cout << "equal" : cout << "not equal"; cout << " to array of char \"string\"" << endl; // 3. and 4. doesn't work with Microsoft // Visual Studio compiler // compare str3 start from pos 7 to 5 // with str1 cout << "3." << endl; comp = str3.compare(str1,7,5); cout << "Part of string str3 is "; ( comp == 0 ) ? cout << "equal" : cout << "not equal"; cout << " to str1" << endl; // compare str3 start from pos 7 // with literal string "string" cout << "4." << endl; comp = str3.compare("string",7); cout << "Part of string str3 is "; ( comp == 0 ) ? cout << "equal" : cout << "not equal"; cout << " to C string \"string\"" << endl; // next 4 'compare' functions // doesn't work with GNU compiler cout << "5." << endl; comp = str1.compare(6,10,ch); cout << "String str1 is "; ( comp == 0 ) ? cout << "equal" : cout << "not equal"; cout << " to part of char ary \"first string\"" << endl; cout << "6." << endl; comp = str1.compare(0,3,str3); cout << "Part of str1 is "; ( comp == 0 ) ? cout << "equal" : cout << "not equal"; cout << " to string \"second string\"" << endl; cout << "7." << endl; comp = str1.compare(1,3,str2,1,3); cout << "String str1 is "; ( comp == 0 ) ? cout << "equal" : cout << "not equal"; cout << " to part of string \"second string\"" << endl; cout << "8." << endl; comp = str1.compare(1,3,str2,1,3); cout << "String str1 is "; ( comp == 0 ) ? cout << "equal" : cout << "not equal"; cout << " to part of string \"second string\"" << endl; return 0; } OUTPUT: GNU compiler // string str1 is : string // string str2 is : String // char ary ch is : first string // string str3 is : second string // // 1. // String str1 is not equal to string str2 // 2. // String str1 is equal to array of char "string" // 3. // Part of string str3 is equal to str1 // 4. // Part of string str3 is equal to C string "string" // 5. // 6. // 7. // 8. OUTPUT: Microsoft Visual Studio compiler // string str1 is : string // string str2 is : String // char ary ch is : first string // string str3 is : second string // // 1. // String str1 is not equal to string str2 // 2. // String str1 is equal to array of char "string" // 3. // 4. // 5. // String str1 is not equal to part of char ary "first // string" // 6. // Part of str1 is not equal to string "second string" // 7. // String str1 is equal to part of string "second string" // 8. // String str1 is equal to part of string "second string" // Press any key to continue copy 1.
#include <iostream> #include <string> using namespace std; int main () { string str = "First Name: Robert"; char fname[255]; cout << "str is: " << str << endl; int n = str.find(':'); str.copy(fname, // copy to array n+1, // how many char 0); // start position from str // must terminate fname with '\0'; fname[n+1] = 0; cout << "fname is: " << fname << endl; return 0; } OUTPUT: // str is: First Name: Robert // fname is: First Name: empty 1.
#include <iostream> #include <string> using namespace std; int main () { string str = "*******"; while ( ! str.empty() ) { cout << str << endl; str.erase(str.end()-1); } cout << endl; return 0; } OUTPUT: // ******* // ****** // ***** // **** // *** // ** // * end 1.
// returns an iterator porsitioned immediately // after the last character in string#include <iostream> #include <string> using namespace std; int main () { string s; string str = "*************************"; size_t pos = str.length(); while ( pos ) { s.assign ( str.begin(),str.end() - pos+1); cout << s << endl; pos -= 5; } return 0; } OUTPUT: // * // ****** // *********** // **************** // ********************* erase 1.
#include <iostream> #include <string> #include <algorithm> using namespace std; int main () { string str, s; for ( char ch = 'a'; ch <= 'z'; ch++ ) str.append(1,ch); s = str; cout << "str is: " << str << endl; cout << "s is: " << str << endl; // removes 13 characters from the beginning str.erase(0,13); cout << "Erased range fron str : " << str << endl; // removes 13 characters starts from 14 str = s.erase(13,13); cout << "Erased range from s : " << str << endl; // removes one character pointed by s.begin() cout << endl << "Erase one, second character from s" << endl; s.erase(s.begin()+1); cout << "s is: " << s << endl; // removes range of characters s.erase(s.begin(),s.begin()+4); cout << "s is: " << s << endl; return 0; } OUTPUT: // str is: abcdefghijklmnopqrstuvwxyz // s is: abcdefghijklmnopqrstuvwxyz // Erased range fron str : nopqrstuvwxyz // Erased range from s : abcdefghijklm // // Erase one, second character from s // s is: acdefghijklm // s is: fghijklm find 1.
#include <iostream> #include <string> #include <algorithm> using namespace std; int main () { string str("C++ is best language"); int pos1, pos2; // size_t or size_type // work not correct // search for first string "best" inside of str // default position is 0 pos1 = str.find ("best"); cout << "Word best is found on position " << pos1+1 << endl; // if pattern is not found - return -1 pos2 = str.find ("best",pos1+1); cout << "Word best is found on position " << pos2+1 << endl; // search for first occurrence of character pos1 = str.find('g'); cout << "First character 'g' found on position " << pos1 << endl; // search for first occurrence of string string s = "is"; pos1 = str.find (s); cout << "Word 'is' is found on position " << pos1+1 << endl; return 0; } OUTPUT: // Word best is found on position 8 // Word best is found on position 0 // First character 'g' found on position 15 // Word 'is' is found on position 5 find_first_not_of 1.
#include <iostream> #include <string> using namespace std; int main () { string str("C++ is best language"); cout << "str is: " << str << endl; int n = str.find_first_not_of("aeiouAEIOU"); cout << "First consonant found at " << n+1 << " position" << endl; return 0; } OUTPUT: // str is: C++ is best language // First consonant found at 1 position find_first_not_of 2.
#include <iostream> #include <string> using namespace std; int main () { string str("C++ is best language"); cout << "str is: " << str << endl; // search first not ' ', // start from position 7 int n = str.find_first_not_of(' ',7); cout << "first not of space character " << "found at position " << n+1 << endl; return 0; } OUTPUT: // str is: C++ is best language // first not of space character found at position 8 find_first_not_of 3.
#include <iostream> #include <string> using namespace std; int main () { string str("C++ is best language"); string s = "C++"; cout << "str is: " << str << endl; // search character from pattern // using the first x chåracters in pattern. // the value position must be given int n = str.find_first_not_of("CBCD",0,3); cout << "first not 'C' is found at position " << n+1 << endl; // search first not of // pattern is string n = str.find_first_not_of(s); cout << "first not of C++ is found " << "at position " << n+1 << endl; return 0; } OUTPUT: // str is: C++ is best language // first not 'C' is found at position 2 // first not of C++ is found at position 4 find_first_of 1.
#include <iostream> #include <string> using namespace std; int main () { string str("C++ is best language"); string s = "be"; cout << "str is: " << str << endl; // search be start from position 2 // if position is ommited - default is 0 int n = str.find_first_of(s,2); cout << "first 'be' found at position " << n+1 << endl; // same as above but search for character n = str.find_first_of('l'); cout << "first character 'l' found at " << "position " << n+1 << endl; // search 'first of' for the characters in // charary char charary[] = " bea"; cout << "charary[] = \" bea\"" << endl; n = str.find_first_of(charary,0); cout << "first character from charary " << "found at position " << n+1 << endl; cout << "Note: position 4 is space" << endl; // same as above but third argumen is // number of character from which searching // starts // this variant of find_first_of dosn't // work properly with GNU compiler n = str.find_first_of(" bae",0,3); cout << "first character from charary " << "found at position " << n+1 << endl; return 0; } OUTPUT: // str is: C++ is best language // first 'be' found at position 8 // first character 'l' found at position 13 // charary[] = " bea" // first character from charary found at position 4 // Note: position 4 is space // first character from charary found at position 4 find_last_not_of 1.
#include <iostream> #include <string> using namespace std; int main () { string str("C++ is best language"); string s = "langue"; int pos = str.length()-1; cout << "str is: " << str << endl; // returns the highest position <= pos of a character // in str that does not match any charcter in s; // returns nopos if there is no such position: // npos is the default value for pos int n = str.find_last_not_of(s, pos); cout << "last_not_of 'langue' found at position " << n+1 << endl; // same as above but search for single character n = str.find_last_not_of('e'); cout << "last_not_of 'e' found at position " << n+1 << endl; char ary[] = "be"; // seawrch for occurence last_not_of // from pattern ary in str n = str.find_last_not_of(ary); cout << "last_not_of 'be' found at position " << n+1 << endl; return 0; } OUTPUT: // str is: C++ is best language // last_not_of 'langue' found at position 12 // last_not_of 'e' found at position 19 // last_not_of 'be' found at position 19 find_last_of 1.
#include <iostream> #include <string> using namespace std; int main () { string str("C++ is best language"); string s = "g"; cout << "str is: " << str << endl; cout << "s is: " << s << endl; int n = str.find_last_of(s); cout << "last_of '" << s << "' faund" << " at position " << n+1 << endl; n = str.find_last_of(' '); cout << "last_of ' ' faund" << " at position " << n+1 << endl; n = str.find_last_of(" la"); cout << "last_of \" la\" faund" << " at position " << n+1 << endl; return 0; } OUTPUT: // str is: C++ is best language // s is: g // last_of 'g' faund at position 19 // last_of ' ' faund at position 12 // last_of " la" faund at position 18 insert 1.
#include <iostream> #include <string> using namespace std; int main () { string str = "C++ language"; string s = "is best"; char ch[] = "C++ language"; cout << "str is: " << str << endl; cout << "s is: " << s << endl; cout << "ch is: " << s << endl; // insert a copy of s into str // at position pos; string::size_type pos = 4; str.insert(pos,s); cout << "str is: " << str << endl; // insert a copy of ch into str at // the position specified by iterator // return an iterator positioned at // this copy int n = str.find('l'); str.insert(str.begin() + n,' '); cout << "str is: " << str << endl; // like above but n x copies of char str.insert(str.end(),3,'!'); cout << "str is: " << str << endl; // insert 4 char from ch into s // at the position 0 s.insert(0,ch,4); cout << "s is: " << s << endl; // insert 8 characters from str // start from position n ('langu...') // into s at position x (end string) n = str.find('l'); int x = s.length(); s.insert(x,str,n,8); cout << "s is: " << s << endl; n = s.find('l'); s.insert(s.begin()+n,' '); cout << "s is: " << s << endl; // insert range (begin - begin+7) of str // into s at position begin+4 s.insert(s.begin()+4,str.begin(),str.begin()+7); cout << "s is: " << s << endl; return 0; } OUTPUT: // str is: C++ language // s is: is best // ch is: is best // str is: C++ is bestlanguage // str is: C++ is best language // str is: C++ is best language!!! // s is: C++ is best // s is: C++ is bestlanguage // s is: C++ is best language // s is: C++ C++ is is best language length 1.
#include <iostream> #include <string> using namespace std; int main () { string str = "C++ is best computer language"; cout << "str is: " << str << endl; cout << "Length of str is : " << str.length() << endl; return 0; } OUTPUT: // str is: C++ is best computer language // Length of str is : 29 max_size 1.
// returns a reverse iterator positioned // at the last character in string#include <iostream> #include <string> using namespace std; int main () { string str = "C++ is best computer language"; cout << "str is: " << str << endl; cout << "max_size of str is: " << str.max_size() << endl; return 0; } OUTPUT: // str is: C++ is best computer language // max_size of str is: 4294967294 rbegin 1.
#include <iostream> #include <string> using namespace std; int main () { string str = "C++ is best computer language"; cout << "str is: " << str << endl; // usual iterator doesn't work string::reverse_iterator It = str.rbegin(); while ( It != str.rend() ) cout << *It++; cout << endl; return 0; } OUTPUT: // str is: C++ is best computer language // egaugnal retupmoc tseb si ++C replace 1.
#include <iostream> #include <string> using namespace std; int main () { string str = "STL is created from Dennis Ritchie"; string s1 = "was"; string s2 = "developed"; string s3 = "Stepanov alexander"; cout << "str is: " << str << endl; cout << "replace 'is' for 'was'" << endl; str.replace(4, // start position in str 2, // how many characters s1); // source for replasment cout << "str is: " << str << endl; cout <<"replace 'created' for 'developed'" << endl; int n = str.find('c'); // pos of 'created' int x = str.find("from") -1; str.replace(str.begin()+n,// start pointer str.begin()+x, // end pointer s2); // source cout << "str is: " << str << endl; cout << "replace 'Dennis' for 'alexander'" << endl; int x1 = str.find('D'); // search Dennis int x2 = str.find(' ',x1+1); // space after int y1 = s3.find("alex"); // search 'alex' int y2 = strlen("alexander"); str.replace(x1, // start position in str x2-x1, // how characters to replace s3, // source for replacement y1, // start positio from source y2); // how chracter start from y1 cout << "str is: " << str << endl; cout << "replace 'from' for 'by'" << endl; char ary[] = "bytes"; n = str.find("from"); // same variant possible with iterators // instead of number of position str.replace(n, // start position in str 4, // how many characters ary, // source 2); // first 2 characters from source cout << "str is: " << str << endl; cout << "replace 'a' for 'A' (alexander)" << endl; n = str.find("alexander"); str.replace(n, // start position in str 1, // how character(s) 1, // how many copies of character 'A'); // character for replasment cout << "str is: " << str << endl; cout << "replace 'Ritchie' for 'Stepanov'" << endl; x1 = str.find('R'); y1 = s3.find(' '); str.replace(str.begin()+x1, // start pointer str.end(), // to the end of str s3.begin(), // start pointer from source s3.begin()+y1 // end pointer from ); // source cout << "str is: " << str << endl; return 0; } OUTPUT: // str is: STL is created from Dennis Ritchie // replace 'is' for 'was' // str is: STL was created from Dennis Ritchie // replace 'created' for 'developed' // str is: STL was developed from Dennis Ritchie // replace 'Dennis' for 'alexander' // str is: STL was developed from alexander Ritchie // replace 'from' for 'by' // str is: STL was developed by alexander Ritchie // replace 'a' for 'A' (alexander) // str is: STL was developed by Alexander Ritchie // replace 'Ritchie' for 'Stepanov' // str is: STL was developed by Alexander Stepanov reverse 1.
#include <iostream> #include <string> using namespace std; int main () { string str = "Anatoliy Urbanskiy"; cout << str.reverse() << endl; return 0; } OUTPUT: resize 1.
// if <=s.size(), truncates rightmost // character in s to make it of size n; otherwise, adds // copies of character ch to end of s to increase it size // to n, or adds a default character value (usually a // blank) if ch is omitted; return type is void#include <iostream> #include <string> using namespace std; int main () { string str = "Alexander Stepanov"; cout << "str is: " << str << endl; cout << "size of str is: " << str.size() << endl; str.resize(11); cout << "after str.resize(11)" << endl; cout << "str is: " << str << endl; cout << "size of str is: " << str.size() << endl; str.resize(20,'.'); cout << "after str.resize(20,'.')" << endl; cout << "str is: " << str << endl; cout << "size of str is: " << str.size() << endl; return 0; } OUTPUT: // str is: Alexander Stepanov // size of str is: 18 // after str.resize(11) // str is: Alexander S // size of str is: 11 // after str.resize(9,'.') // str is: Alexander S......... // size of str is: 20 rfind 1.
#include <iostream> #include <string> using namespace std; int main () { string str = "We go step by step to the target"; string s1 = "step"; cout << "str is: " << str << endl; cout << "s1 is: " << s1 << endl; cout << "int n1 = str.find(s1)" << endl; int n1 = str.find(s1); cout << "n1 = " << n1+1 << endl; cout << "int n2 = str.rfind(s1)" << endl; int n2 = str.rfind(s1); cout << "n2 = " << n2+1 << endl; cout << "n3 = str.rfind(s1,n2-1)" << endl; int n3 = str.rfind(s1,n2-1); cout << "n3 = " << n3+1 << endl; cout << "n1 = str.rfind('t')" << endl; n1 = str.rfind('t'); cout << "n1 = " << n1+1 << endl; cout << "n2 = str.rfind('t',n1-1)" << endl; n2 = str.rfind('t',n1-1); cout << "n2 = " << n2+1 << endl; char ch[] = "step"; cout << "char ch[] = \"step\"" << endl; cout << "n1 = str.rfind(ch)" << endl; n1 = str.rfind(ch); cout << "n1 = " << n1+1 << endl; cout << "n2 = str.rfind(\"stabc\",10,2)" << endl; n2 = str.rfind("stabc", // pattern 10, // start position 2); // for first 2 char // in pattern cout << "n2 = " << n2+1 << endl; return 0; } OUTPUT: // str is: We go step by step to the target // s1 is: step // int n1 = str.find(s1) // n1 = 7 // int n2 = str.rfind(s1) // n2 = 15 // n3 = str.rfind(s1,n2-1) // n3 = 7 // n1 = str.rfind('t') // n1 = 32 // n2 = str.rfind('t',n1-1) // n2 = 27 // char ch[] = "step" // n1 = str.rfind(ch) // n1 = 15 // n2 = str.rfind("stabc",10,2) // n2 = 7 size 1.
#include <iostream> #include <string> using namespace std; int main () { string str = "We go step by step to the target"; string::size_type size = str.size(); cout << "str is: " << str << endl; cout << "size of str = " << size << endl; return 0; } OUTPUT: // str is: We go step by step to the target // size of str = 32 substr 1.
// str.subsr(pos,n); // returns a copy of the substring consisting // of n characters from str, beginning at position pos // (default value 0); if n is too large or is omitted, // characters are copied only until the end of s is // reached#include <iostream> #include <string> using namespace std; int main () { string str = "We go step by step to the target"; cout << "str is: " << str << endl; int n = str.find("step"); string s = str.substr(n); cout << "s is: " << s << endl; s = str.substr(n,12); cout << "s is: " << s << endl; return 0; } OUTPUT: // str is: We go step by step to the target // s is: step by step to the target // s is: step by step swap 1.
#include <iostream> #include <string> using namespace std; int main () { string str1 = "Robert"; string str2 = "Forest"; cout << "str1 is: " << str1 << endl; cout << "str2 is: " << str2 << endl; cout << endl; cout << "str1.swap(str2)" << endl; cout << endl; str1.swap(str2); cout << "str1 is: " << str1 << endl; cout << "str2 is: " << str2 << endl; return 0; } OUTPUT: // str1 is: Robert // str2 is: Forest // // str1.swap(str2) // // str1 is: Forest // str2 is: Robert
Strongly Connected Component (Tarjan)
8:00 PM Sayef Azad Sakin
vector< int > M[MX]; int color[MX],f[MX],low[MX],ftm,st[MX],top,scc; bool instack[MX]; void dfs(int u){ int i,v,sz; f[u] = ftm; low[u] = ftm; ftm++; st[top] = u;top++;instack[u] = true; sz = M[u].size(); color[u] = 1; for(i=0;i<sz;i++){ v = M[u][i]; if(!color[v]){ dfs(v); low[u] = _min(low[u],low[v]); } else if(instack[v])low[u] = _min(low[u],f[v]); } if(f[u] == low[u]){ scc++; do{ v = st[top-1];top--;instack[v] = false; printf(" %d",v); }while(top && v!=u); printf("\n"); } } //n = no.of vertices, m = no.of edges void tarjanscc(int n){ int i; ftm = top = 0; memset(color,0,sizeof(color)); memset(f,0,sizeof(f)); memset(low,0,sizeof(low)); memset(instack,0,sizeof(instack)); for(i=0;i<n;i++){ if(!color[i])dfs(i); } printf("total scc: %d\n",scc); for(i=0;i<=n;i++)M[i].clear(); }
Maximum Flow (basic)
7:58 PM Sayef Azad Sakin
vector < int > M[mx]; int pre[mx], cap[mx][mx]; bool color[mx]; int bfs(int s, int t){ int ok,u,v,sz,i,path_cap; memset(pre,-1,sizeof(pre)); memset(color,0,sizeof(color)); queue < int > q; color[s] = 1; q.push(s); ok = 1; while(!q.empty() && ok){ u = q.front(); q.pop(); sz = M[u].size(); for(i=0;i<sz;i++){ v = M[u][i]; if(!color[v] && cap[u][v] > 0){ q.push(v); color[v] = 1; pre[v] = u; if(v==t){ok = 0;break;} } } } path_cap = inf; u = t; while(pre[u]!=-1){ v = pre[u]; path_cap = _min(path_cap, cap[v][u]); u = v; } u = t; while(pre[u]!=-1){ v = pre[u]; cap[v][u] -= path_cap; cap[u][v] += path_cap; u = v; } if(path_cap==inf)return 0; return path_cap; } int max_flow(int s, int t){ int r,pcap; r = 0; while(true){ pcap = bfs(s,t); if(!pcap)break; r += pcap; } return r; }
Minimum Spanning Tree (Kruskal)
7:57 PM Sayef Azad Sakin
struct node { int u,v,w; bool operator < ( const node &b) const{ return w<b.w; } }e[mx]; int pr[mx]; int find(int r) { return r==pr[r]?r:(pr[r]=find(pr[r])); } int mst(int n,int m){ int i,u,v,r=0; for(i=1;i<=n;i++) pr[i]=i; sort(e,e+m); for(i=0;i<m;i++) { u=find(e[i].u); v=find(e[i].v); if(u!=v) { r+=e[i].w; pr[u]=v; } } return r; }
Max flow with min cut
7:54 PM Sayef Azad Sakin
vector < int > M[mx]; i64 cap[mx][mx], CAP[mx][mx]; int pre[mx]; bool color[mx]; i64 bfs(int s, int t){ int ok,u,v,sz,i; i64 path_cap; memset(pre,-1,sizeof(pre)); memset(color,0,sizeof(color)); queue < int > q; color[s] = 1; q.push(s); ok = 1; while(!q.empty() && ok){ u = q.front(); q.pop(); sz = M[u].size(); for(i=0;i<sz;i++){ v = M[u][i]; if(!color[v] && cap[u][v] > 0){ q.push(v); color[v] = 1; pre[v] = u; if(v==t){ok = 0;break;} } } } path_cap = inf; u = t; while(pre[u]!=-1){ v = pre[u]; path_cap = _min(path_cap, cap[v][u]); u = v; } u = t; while(pre[u]!=-1){ v = pre[u]; cap[v][u] -= path_cap; cap[u][v] += path_cap; u = v; } if(path_cap==inf)return 0; return path_cap; } i64 max_flow(int s, int t){ i64 r,pcap; r = 0; while(true){ pcap = bfs(s,t); if(!pcap)break; r += pcap; } return r; } void dfs(int u){ int sz,i,v; color[u] = 1; sz = M[u].size(); for(i=0;i<sz;i++){ v = M[u][i]; if(!color[v] && cap[u][v] && CAP[u][v])dfs(v); } } void printMinCut(int s, int t, int n){ int u,sz,v,i; u = max_flow(s,t); memset(color,0,sizeof(color)); dfs(s); for(u=1;u<=n;u++)if(color[u]){ sz = M[u].size(); for(i=0;i<sz;i++){ v = M[u][i]; if(!color[v] && !cap[u][v] && CAP[u][v])printf("%d %d\n",u,v); } } }
Convex Hull (Grahm Scan)
7:47 PM Sayef Azad Sakin
point fp; bool cmp(const point &a,const point &b){ i64 d = isLeft(fp,a,b); if(d<0)return false; if(feq(d,(i64)0) && (dist(fp,a) > dist(fp,b)) )return false; return true; } void ConvexHull(point p[], point c[], int &np, int &nc){ int i,j,pos = 0,k; i64 dd; bool flg=0; for(i=1;i<np;i++){ if( (p[i].x < p[pos].x) || ( feq(p[i].x,p[pos].x) && p[i].y < p[pos].y) )pos = i; dd = isLeft(p[0],p[i],p[(i+1)%np]); if(!flg && !feq(dd,(i64)0))flg=1; } swap(p[pos],p[0]); fp = p[0]; sort(p+1,p+np,cmp); c[0] = p[0]; c[1] = p[1]; c[2] = p[2]; for(i = j = 3; i < np; i++){ while(isLeft(c[j-2],c[j-1],p[i]) < 0)j--; c[j++] = p[i]; } i--; for(k=i-1;k>=0 && flg;k--){ dd = isLeft(c[0],p[k],p[i]); if(!feq(dd,(i64)0))break; c[j++] = p[k]; } if(np>2)nc = j; else nc = np; } inline i64 PolygonArea(point p[],int np){ i64 area = 0; for(int i = 0;i < np; i++){ area += ( (p[i].x*p[(i+1)%np].y) - (p[i].y*p[(i+1)%np].x) ); } return area; }
Miscellaneous Geometry
7:44 PM Sayef Azad Sakin
#include <iostream> #include <cstdio> #include <cstdlib> #include <cmath> #include <vector> #include <map> #include <algorithm> using namespace std; #define mx 100 #define pii pair < int, int > #define i64 long long #define eps 1e-9 #define _min(i,j) ((i)>(j+eps)?(j):(i)) #define _max(i,j) ((i)>(j+eps)?(i):(j)) struct point{ i64 x,y; point(){} point(i64 xx, i64 yy){x = xx;y = yy;} }; struct line { // Creates a line with equation ax + by + c = 0 i64 a, b, c; line() {} line( point p1,point p2 ) { a=p1.y-p2.y; b=p2.x-p1.x; c=p1.x*p2.y-p2.x*p1.y; } }; struct segment{ point st,end; segment(){} segment(point a,point b){st = a;end = b;} }; struct rect{ point ul,lr; rect(){} rect(point a, point b){ul = a;lr = b;} }; struct tr{ point p[3]; tr(){} tr(point a, point b, point c){p[0] = a; p[1] = b; p[2] = c;} }; struct circle{ i64 r; point center; circle(){} circle(point b,i64 a){r = a; center = b;} }; struct polygon { int n; point P[mx]; }; inline bool feq(i64 a, i64 b){ return (fabs(a-b)<eps); } inline i64 dist(point a, point b){ return ( (a.x-b.x) * (a.x-b.x) + (a.y-b.y) * (a.y-b.y) ); } inline i64 isLeft(point a, point b, point c){ return ( (a.x*b.y) + (b.x*c.y) + (c.x*a.y) - (a.y*b.x) - (b.y*c.x) - (c.y*a.x) ); } inline bool onSegment(point a,point b,point c){ if( (_min(a.x,b.x) < c.x || feq(_min(a.x,b.x),c.x)) && (c.x < _max(a.x,b.x) || feq(c.x,_max(a.x,b.x))) ) if( (_min(a.y,b.y) < c.y || feq(_min(a.y,b.y),c.y) ) && (c.y < _max(a.y,b.y) || feq(c.y,_max(a.y,b.y))) )return true; return false; } inline bool isSegIntersect(point p1,point p2,point p3,point p4){ i64 d1,d2,d3,d4; d1 = isLeft(p1,p2,p3); d2 = isLeft(p1,p2,p4); d3 = isLeft(p3,p4,p1); d4 = isLeft(p3,p4,p2); if( (d1*d2)<0 && (d3*d4)<0 )return true; else if(feq(d1,(i64)0) && onSegment(p1,p2,p3))return true; else if(feq(d2,(i64)0) && onSegment(p1,p2,p4))return true; else if(feq(d3,(i64)0) && onSegment(p3,p4,p1))return true; else if(feq(d4,(i64)0) && onSegment(p3,p4,p2))return true; return false; } inline bool intersection( line L1, line L2, point &p ) {// If two line intersect each other i64 det = L1.a * L2.b - L1.b * L2.a; if( feq(det,(i64)0) ) return false; p.x = ( L1.b * L2.c - L2.b * L1.c ) / det; p.y = ( L1.c * L2.a - L2.c * L1.a ) / det; return true; } inline bool inRect(rect r, point p){// If a point inside a rectangle if( (p.x > r.ul.x && p.x < r.lr.x) && (p.y < r.ul.y && p.y > r.lr.y) ) return true; return false; } inline bool inTr(tr t, point p){// If a point inside a triangle i64 d,d1,d2,d3; d = fabs( isLeft(t.p[0],t.p[1],t.p[2]) ); d1 = fabs( isLeft(t.p[0],t.p[1],p) ); if( feq(d1,(i64)0) && onSegment(t.p[0],t.p[1],p) )return false; d2 = fabs( isLeft(t.p[1],t.p[2],p) ); if( feq(d2,(i64)0) && onSegment(t.p[1],t.p[2],p) )return false; d3 = fabs( isLeft(t.p[2],t.p[0],p) ); if( feq(d3(i64)0) && onSegment(t.p[2],t.p[0],p) )return false; return feq(d,d1+d2+d3); } inline bool inCircle(circle c,point p){// If a point inside a circle if( dist(c.center,p)+eps < c.r ) return true; return false; }
Bipartite Matching (Basic)
7:16 PM Sayef Azad Sakin
#define mx 210 vector < int > g[mx]; int lf[mx],rt[mx],n; bool vis[mx]; bool dfs(int p) { int i,j=g[p].size(); for(i=0;i<j;i++) if(!vis[g[p][i]]) { vis[g[p][i]]=1; if(rt[g[p][i]]==-1 || dfs(rt[g[p][i]])) { rt[g[p][i]]=p; lf[p]=g[p][i]; return true; } } return false; } int bpm() { int i,q=0; memset(lf,-1,sizeof lf); memset(rt,-1,sizeof rt); for(i=0;i<n;i++) { memset(vis,0,sizeof vis); if(dfs(i))q++; } return q; }
Bellman Ford
4:51 PM Sayef Azad Sakin
vector < pii > M[mx]; int d[mx]; bool bellman_ford(int s,int n){ int i,u,j,sz,v,w; bool done = false; for(i=0;i<n;i++)d[i] = inf; d[s] = 0; for(i=0;i<n && !done;i++){ done = true; for(u=0;u<n;u++){ sz = M[u].size(); for(j=0;j<sz;j++){ v = M[u][j].first; w = M[u][j].second; if(d[v] > (d[u] + w)){ d[v] = d[u] + w; done = false; } } } } return done; }
Bridge Network
4:50 PM Sayef Azad Sakin
#define mx 110 #define _min(i,j) ((i)>(j)?(j):(i)) int d[mx],low[mx],t; bool color[mx],artp[mx]; vector < int > M[mx]; vector < pii > bridge; void dfs(int par, int u){ int sz,i,v; low[u] = d[u] = ++t; color[u] = 1; sz = M[u].size(); for(i=0;i<sz;i++){ v = M[u][i]; if(v==par)continue; if(!color[v]){ dfs(u,v); low[u] = _min(low[u],low[v]); if(low[v] > d[u]) bridge.push_back(pii(u,v)); } else low[u] = _min(low[u],d[v]); } }
Articulation Point
4:48 PM Sayef Azad Sakin
#define mx 110 #define _min(i,j) ((i)>(j)?(j):(i)) int d[mx],low[mx],t; bool color[mx],artp[mx]; vector < int > M[mx]; void dfs(int par, int u){ int sz,i,v,child = 0; low[u] = d[u] = ++t; color[u] = 1; sz = M[u].size(); for(i=0;i<sz;i++){ v = M[u][i]; if(v==par)continue; if(!color[v]){ child++; dfs(u,v); low[u] = _min(low[u],low[v]); if(low[v] >= d[u] && par!=-1)artp[u] = 1; } else low[u] = _min(low[u],d[v]); } if(par == -1 && child > 1 && !artp[u])artp[u] = 1; }
Single Source Shortest Path (Dijkstra)
4:45 PM Sayef Azad Sakin
struct comp { bool operator() (const pii &a, const pii &b) { return a.second > b.second; } }; int color[mx], d[mx], nodes; vector < pii > path[MX]; int dijkstra(int source, int dest){ int u,v,sz,y,z; priority_queue< pii, vector< pii >,comp > q; for(v = 1; v<=nodes; v++){ color[v] = 0; d[v] = inf; } d[source] = 0; q.push(pii(source, 0)); while(!q.empty()){ u = q.top().first; if(u==dest)break; q.pop(); if(color[u])continue; sz = path[u].size(); for(v=0;v<sz;v++){ y = path[u][v].first; z = path[u][v].second; if(!color[y] && d[u]+z < d[y]){ d[y] = d[u]+z; q.push(pii(y,d[y])); } } color[u] = 1; } return d[dest]; }
Bigmod (a^b%m)
4:44 PM Sayef Azad Sakin
i64 bigmod(i64 a,i64 b,i64 d) { i64 r=1; while(b) { if(b&1) r=(r*a)%d; b>>=1; a=(a*a)%d; } return r; }
Number of Divisor
4:40 PM Sayef Azad Sakin
i64 noOfDivisor(i64 n){ int j,f; i64 cnt,ans=1; f = 0; for(j=0;prime[j]<=n && j<prlen;j++){ cnt = 0; if(n%prime[j]==0){ while(n%prime[j]==0){ cnt++; n /= prime[j]; } f=1; ans *= (cnt+1); } } //if(!f || n!=1)cnt++; if(n^1)ans <<= 1; return ans; }
Template
4:37 PM Sayef Azad Sakin
//Bismillahir Rahmanir Rahim //#pragma warning(disable:4786) //#pragma comment(linker,"/STACK:514850816") #include <iostream> #include <cstdio> #include <cstdlib> #include <cmath> #include <cctype> #include <cstring> #include <climits> #include <string> #include <sstream> #include <queue> #include <stack> #include <vector> #include <set> #include <map> #include <list> #include <algorithm> using namespace std; #define mx 100000 #define pii pair < int, int > #define i64 __int64 #define inf 2147483647 #define eps 1e-11 #define pi 2*acos(0.0) int gcd( int a, int b ) { return !b ? a : gcd ( b, a&b );} struct Euclid{ int x,y,d; Euclid(){} Euclid( int xx, int yy, int dd ) { x = xx, y = yy, d = dd; } }; Euclid egcd( int a, int b){ if(!b)return Euclid(1,0,a); Euclid r = egcd(b,a%b); return Euclid( r.y, r.x - a / b * r.y, r.d); }
Prime Factorization
4:36 PM Sayef Azad Sakin
void PrimeFact( int n, int *factors, int *factCount, int &len){ int i,count, sqrtN; sqrtN = (int) sqrt( (double) n ) + 1; for(i = 0; prime[i] < sqrtN ; i++)if(!(n%prime[i])){ factors[len] = prime[i]; count = 0; while(!(n%prime[i]))n/=prime[i], count++; factCount[len++] = count; sqrtN = (int) sqrt( (double) n ) + 1; } if(n>1)factors[len] = n, factCount[len++] = 1; }
Generating Prime (Sieve)
4:34 PM Sayef Azad Sakin
#define mx 100000 #define chkp(n) (prm[n>>6]&(1<<((n>>1)&31))) #define genp(n) (prm[n>>6]|=(1<<((n>>1)&31))) #define PrimeLimit 10000000 int prm[PrimeLimit / 64], prime[mx], prlen; void GeneratePrime(){ int i,j,sqrtN; prlen = 0; prime[prlen++]=2; sqrtN = ( int ) sqrt ( ( double ) PrimeLimit ) + 1; for(i=3;i<sqrtN;i+=2)if(!chkp(i)){ prime[prlen++] = i; for(j=(i*i);j<PrimeLimit;j+=(i<<1))genp(j); } for(;i<PrimeLimit;i+=2)if(!chkp(i))prime[prlen++]=i; }
Bignumber Subtraction
4:26 PM Sayef Azad Sakin
void Subtraction(char *f, char *s, char *ans){ int lenf,lens,a,carry,ind,b; lenf = strlen(f)-1; lens = strlen(s)-1; carry = ind = 0; while(lens >=0 || lenf >=0){ b = ((lens >=0)?(s[lens--]-'0'):0) + carry; if(f[lenf] >=(b+'0')){a = f[lenf--]-'0';carry = 0;} else{a = f[lenf--]-'0' + 10;carry = 1;} ans[ind++] = (a - b) + '0'; } for(ind--;ind >=0;ind--)if(ans[ind]!='0')break; ans[++ind] = 0; reverse(ans,ans+ind); }
Bignumber Multiplication
4:22 PM Sayef Azad Sakin
void Multiplication(char *f, char *s, char *sum){ int lenf,lens,i,j,k,carry,a; memset(sum,0,sizeof(sum)); lenf = strlen(f);lens = strlen(s); reverse(f,f+lenf);reverse(s,s+lens); for(i=0;i < lens;i++){ carry = 0;k = i; for(j=0;j < lenf;j++){ a = ( (f[j]-'0') * (s[i]-'0') ) + carry; if(i) a += (sum[k]-'0'); sum[k++] = (a%10) + '0'; carry = a/10; } if(carry)sum[k++] = carry + '0'; sum[k++] = '0'; } for(k--;k >=0;k--)if(sum[k]!='0')break; sum[++k] = 0; reverse(sum,sum+k); }
Bignumber Addition
12:10 PM Sayef Azad Sakin
void Addition(char *f, char *s, char *ans){ int lenf,lens,a,carry,ind; lenf = strlen(f)-1; lens = strlen(s)-1; carry = ind = 0; while(lens > =0 || lenf > =0){ a = ((lens > =0) ? (s[lens--]-'0') : 0) + ((lenf > =0) ? (f[lenf--]-'0') : 0) + carry; ans[ind++] = (a%10) + '0'; carry = a/10; } if(carry)ans[ind++] = carry + '0'; ans[ind] = 0; reverse(ans,ans+ind); }