You can have fun and learn something too. Not too much fun though! Here we take a lighthearted look at C++ string, various ways to assign a string and substring, spell forward and reverse, find characters and substrings, append, insert, replace, remove characters, separate a sentence into words and more.
Playing around with std::string
// testing std::string
// a Dev-C++ challenged Console Application by vegaseat 19dec2004
#include <iostream>
#include <string>
using namespace std; // std::string
int main()
{
int k, n;
// assign a string
string s1 = "What is the difference between roast beef and pea soup?";
cout << s1 << endl << endl;
// use \" for embedded double quotes
string s2 = "<tr><td><img src=\"naomi.bmp\"></td><td><b>";
cout << s2 << endl << endl;
// for a multiline assignment use \ to connect
string s3 =
"If you tell a lie long enough\n\
and often enough,\n\
it becomes the truth!";
cout << s3 << endl << endl;
// assign a substring from source to target
// starting at index = 8 and len = 3 characters long
string target;
string source = "No new taxes!";
target.assign(source, 8, 3);
cout << source << endl;
cout << target << endl; // displays axe
// spell out the above string
string::const_iterator ai;
// spell forwards
for(ai = source.begin(); ai != source.end(); ai++)
{
cout << *ai << ' '; // separate with a space
}
cout << endl;
// spell in reverse
for(ai = source.end() - 1; ai != source.begin() - 1; ai--)
{
cout << *ai << ' '; // separate with a space
}
cout << endl << endl;
// assign num = 50 characters '!' to a string
string hey;
hey.assign(50,'!');
cout << hey << endl;
// append hey to source
source.append(hey);
cout << source << endl << endl;
// add marker
for(k = 0, n = 0; k < 18; k++, n++)
{
if (n > 9) n = 0;
cout << n;
}
cout << endl;
string text = "There was nobody at the Missing Persons' Bureau";
cout << text << endl;
// return the character at position 0 and 15 of text
char ch = text.at(0);
cout << "Character at position 0 = " << ch << endl;
ch = text.at(15);
cout << "Character at position 15 = " << ch << endl;
// size() same as length()
cout << "size = " << text.size() << " capacity = " << text.capacity();
cout << endl << endl;
// copy num = 17 char of oldstr into newstr starting at index = 0
string oldstr = "Frank is very fatherly!";
// why not a little old stuff
char newstr[80] = {0};
oldstr.copy(newstr, 17, 0);
cout << oldstr << endl;
cout << newstr << endl << endl;
// add marker
for(k = 0; k < 10; k++)
{
cout << k;
}
cout << endl;
// removes num = 6 characters from the current string
// starting at index = 23
string sd("A really stupid person never becomes senile!");
cout << sd << endl;
sd.erase(23, 6 );
cout << sd << endl << endl;
// return first occurrence of "stupid" within the current string
// starting at index = 0, string::npos (-1) if nothing is found
int pos = sd.find( "stupid", 0 );
if ( pos != string::npos )
{
cout << "stupid is at index " << pos;
}
else
{
cout << "Didn't find stupid";
}
cout << endl;
// doing a reverse search from index, string::npos = fail (-1)
pos = sd.rfind( "smart", 15 );
cout << "smart is at index " << pos << " (fail=-1)" << endl << endl;
// inserts str2 into str1 at locations 11 and then 20
string str1 = "Judges live on income";
string str2 = " fixed";
str1.insert(11, str2);
str1.insert(20, str2);
cout << str1 << endl;
// add ! to the end
str1.push_back('!');
cout << str1 << endl << endl;
// replace characters of tooth string with num (here length)
// characters from teeth string, beginning at index 21
string tooth = "He ate it all with a toothpick";
cout << tooth << endl;
string teeth = "teethpick";
tooth.replace( 21, teeth.length(), teeth );
cout << tooth << endl << endl;
// return a substring of a string starting at index = 19
string str("They will greet us with flowers!");
string sub = str.substr(19);
cout << "original string : " << str << endl;
cout << "substring from 19 on : " << sub << endl;
// change the size of string to num = 18 characters
str.resize(18);
cout << "resize to 18 char : " << str << endl;
// dito, but pad excess (here past 18) with char '!'
str.resize(21,'!');
cout << "resize with ! padding: " << str << endl << endl;
// swap strings
string first( "one, uno, eins, interesting lines" );
string second( "two, dos, zwei, cake-flavored pie" );
cout << "Before swap:" << endl;
cout << "first = " << first << endl;
cout << "second = " << second << endl << endl;
first.swap( second );
cout << "After swap:" << endl;
cout << "first = " << first << endl;
cout << "second = " << second << endl << endl;
// use at() and substr() to separate a string s1 into words
cout << s1 << endl << endl; // show s1 in case you forgot
int start = 0;
// add a space to the end of s1 since this is our delimiter
// this allows us to catch the last word properly
s1.push_back(' ');
for(k = 0; k < s1.size(); k++)
{
// found a space now show the word before that
if (s1.at(k) == ' ')
{
// substr(startposition, length)
cout << s1.substr(start, k - start) << endl;
// update to new startposition
start = k + 1;
}
}
cout << endl;
cout << "Anyone can roast beef!" << endl;
cin.get(); // wait
return 0;
}
Be a part of the DaniWeb community
We're a friendly, industry-focused community of developers, IT pros, digital marketers, and technology enthusiasts meeting, networking, learning, and sharing knowledge.