Koska merkkijonojen käsittely on eräs C- kielen heikkouksista, olisi toivottavaa että luokkakirjastoista löytyisi jokin string-luokka.
BC 5.0:n mukana tulee ANSI - yhteensopivaksi mainostettu luokka (??), jossa on mm. seuraavat ominaisuudet:
// stringt2.cpp - testataan std:n string-luokkaa #include <iostream.h> #include <string> #include <stdio.h> // vain printf-testejä varten using namespace std; #define T(s) cout << #s" = |" << s << "|\n" /* T(s3) => s3 = |kissa| */ int main(void) { try { string s1("Kissa"),s2("istuu"),s3,vert; if ( s1 < s2 ) vert = " < " ; else vert = " >= "; int eq = s1.compare(s2); cout << s1 << vert << s2 << " : "<< eq << '\n';// => Kissa < istuu : -30 s3 = s1 + " " + s2; T(s3); // => |Kissa istuu| s3 += " puussa"; T(s3); // => |Kissa istuu puussa| cout << "Anna jono>"; cin >> s3; // Jos kirjoitetaan Aku Ankka T(s3); // tulostuu nyt Aku ja loput jää! cout << "Anna jono>"; getline(cin,s3,'\n');// Jos kirjoitetaan Aku Ankka T(s3); // tulostuu nyt Aku Ankka char c = s1[2]; T(c); // => |s| int len = s1.length(); T(len);// => |5| s3 = 'A'; T(s3); // => |A| s3 = "0123456"; s3.append("ABCDEF",2,2); T(s3); // => |0123456CD| int paikka = s3.find("34"); T(paikka); // => |3| s2 = s3.substr(2,3); T(s2); // => |234| s3.replace(5,3,"ABCDEF"); T(s3); // => |01234ABCDEFD| s3.remove(5,6); T(s3); // => |01234D| s3.insert(5,"56C"); T(s3); // => |0123456CD| s3[2] = 'C'; T(s3); // => |01C3456CD| s2 = s3.substr(2,3); T(s2); // => |C34| printf("s2 = |%s|\n",s2.c_str() ); // => |C34| char s4[10]; strcpy(s4,s2.c_str()); T(s4); // => |C34| s3.copy(s4,2); T(s4); // => |014| s1 = " Kissa istuu "; // Seuraavat toimivat BC:n cstrinh.h:ssa olevassa string-luokassa // s2 = s3("C.*5"); T(s2); // => |C345| C, mitä tahansa, 5 // s3 = s1.strip(s1.Both,' '); T(s3); // => |Kissa istuu| // s1.to_upper(); T(s1); // => | KISSA ISTUU | c = s2[12]; T(c); // Tulee throw(out_of_range) } catch ( out_of_range ) { cout << "Liian iso indeksi\n"; } return 0; }Borland C++ 5.0:ssa on myös oma string- luokka tiedostossa cstring.h. Se on melkein yhteensopiva standardiehdotuksen kanssa. Valitettavasti edellinen esimerkki ei toimi samalla tavalla inputin kohdalta. Toisaalta cstring.h:ssa on paljon hyödyllisiä lisäominaisuuksia, joita standardista puuttuu. Kunpa standardienkin tekijät joskus tekisivät itse oikean ohjelman! Erityisesti jää kaipaamaan välilyöntien siivoamista ja vertailua, jossa isot ja pienet kirjaimet samaistetaan.
Voisi kuvitella, että myös seuraavat ominaisuudet olisivat hyödyllisiä:
string s1("3"),s2("7"),s3; s3 = s2+"-4"; T(s3); // => |3| s3 = 'A'; T(s3); // => |A| s3 = s1+5; T(s3); // => |8| s3 = 5+s1; T(s3); // => |8| s3 = s1+s2; T(s3); // => |10| s3 = "4"+s2; T(s3); // => |11| s3 = s2+"4"; T(s3); // => |11| s3 = string("56")+"7"; T(s3); // => |63| s3 = "K"+s1; T(s3); // => |K3| s3 = s1+'5'; T(s3); // => |8| s3 = s1+'A'; T(s3); // => |3A| // char ch = s1; T(ch); // => |3| // s3 = 5; T(s3); // => |5| //int i = s3; T(i); // => |5|