Editing a string

Lets say someone inputs the string "2001", how would I be able to use a conditional statement on the first two numbers, and then another conditional statement to test the second two numbers.

ie.

if (__first two numbers__ ==20){

first_two_numbers+=1;
cout<<"This is the "<<those_two_numbers<<"st century!";
}

if (__second two numbers__ ==01){
return a;
}

I know I have to split the string into two variables somehow but I'm not sure of the proper way to do it.

Thanks,
Jim
JSpatAsked:
Who is Participating?

Improve company productivity with a Business Account.Sign Up

x
 
TriskelionConnect With a Mentor Commented:
>> I suggest you try and use the C++ standard library instead of the lower level C-style method.


or you can try this...

char strYear[5]="2001";

if (strYear[0]=='2' && strYear[1]=='0') // "20"
   {
   //Do Something here for "20"
   }

if (strYear[2]=='0' && strYear[3]=='1') // "01"
   {
   //Do something here for "01"
   }
0
 
cwreaSoftware CraftsmanCommented:
First, I assume you are using std::string class, not C-style char[] or char*.

If the string object X contains your string, the following test will be true if and only if the string begins with "20":

if( 0 == X.find("20") )
{
  // executed only if X is of the form ("20...")
  ...
}

For the second test, where you want to see if the next two characters match something, change the 0 to 2 in the if statement.  (When used as above, std::string::find returns the position of the first occurrence of the string passed in.)  So:

if( 2 == X.find("01") )
{
  // executed only if X is of the form ("xx01...")
  ...
}
0
 
JSpatAuthor Commented:
I actually was using the c-style char object, how do I use the std::string class?

I upped the points by 25 for the explanation.
0
Get your problem seen by more experts

Be seen. Boost your question’s priority for more expert views and faster solutions

 
cwreaSoftware CraftsmanCommented:
You can read your input directly into a std::string using std::cin, or you can create a std::string from the C-style char array as follows:

char* x = "chicken";
std::string strX(x);

then use find on strX etc.

I suggest you try and use the C++ standard library instead of the lower level C-style method.  There's a great paper written by Bjarne Stroustrup as to why it is better to learn C++ with higher level abstractions:

http://www.research.att.com/~bs/new_learning.pdf

An excellent book that teaches C++ in such a manner is called "Accelerated C++" by Andrew Koenig and Barbara E. Moo.

Hope that helps.

0
 
TriskelionCommented:
...continued...
or you can...


     char strYear[5] = "2001";
     if (!memcmp(strYear, "20", 2))
          {
          //("got 20");
          }

     if (!memcmp(strYear+2, "01", 2))
          {
          //("got 01");
          }
0
 
zmanzCommented:
>> An excellent book that teaches C++ in such a manner is called "Accelerated C++"

It is a good book. I'm using it right now to learn C++.

http://www.cppreference.com/cppstring.html
0
 
JackThorntonCommented:
hmmmm....

I'm wondering what's wrong with:

int year = atoi(yearAsString);
int century = year / 100;
int yearInCentury = year % 100;

- jack

0
 
mnashadkaCommented:
How about using the C++ string:
char year_str[] = "2001";
std::string century(year_str, 2);
std::string year(&year_str[2], 2);

if(century == "20")
{
 . . .
}
if(year == "01")
{
 . . .
}
0
 
JackThorntonCommented:
To expand on my comment, cout will automatically convert integers to strings; e.g.

cout << "This is the " << 21 << "st Century";

will yield equivalent results to:

cout << "This is the " << "21" << "st Century";

Integers will be much more efficient in subsequent tests; in fact, adding one to the century
(e.g. "first_two_numbers+=1") will *not* work if first_two_numbers is any kind of string variable you can think of (at best a string class will use the += operator to concatenate, turning "20" into "201" instead of "21"). Also, this code does not fail with centuries > 100 (not that a "Year 10001 Problem" is something we have to worry about; it's just somewhat poor form to assume two digits) or centuries < 10 (in case someone is doing a history lesson).

BTW, "atoi" is an old, standard 'C' library function, which is still valid and available in C++, and converts the string to an integer, if possible (it will fail if the first character isn't numeric, '-' or '+'). It will convert as much as possible; so you don't have to necessarily parse the number off the front of a string. For example,
atoi("123 Maplewood Lane") would yield the integer 123.

- jack
0
 
JackThorntonCommented:
To expand on my comment, cout will automatically convert integers to strings; e.g.

cout << "This is the " << 21 << "st Century";

will yield equivalent results to:

cout << "This is the " << "21" << "st Century";

Integers will be much more efficient in subsequent tests; in fact, adding one to the century
(e.g. "first_two_numbers+=1") will *not* work if first_two_numbers is any kind of string variable you can think of (at best a string class will use the += operator to concatenate, turning "20" into "201" instead of "21"). Also, this code does not fail with centuries > 100 (not that a "Year 10001 Problem" is something we have to worry about; it's just somewhat poor form to assume two digits) or centuries < 10 (in case someone is doing a history lesson).

BTW, "atoi" is an old, standard 'C' library function, which is still valid and available in C++, and converts the string to an integer, if possible (it will fail if the first character isn't numeric, '-' or '+'). It will convert as much as possible; so you don't have to necessarily parse the number off the front of a string. For example,
atoi("123 Maplewood Lane") would yield the integer 123.

- jack
0
 
JackThorntonCommented:
<sigh> sometimes I really *hate* what EE does what EE does

double your pleasure, double your fun.... ;-)

- jack
0
 
ssingarCommented:
Here is a complete program...

#include <iostream>
#include <string>

int main()
{
   char number[20]; //any size you want up to 20

   cin >> number;
 
   std::string numString(number); //construct the string

   if (numString.size() >= 4)
   {
     std::string first2Letters = numString.substr(0,2);
     std::string next2Letters = numStrings.substr(2,2);
 
   //and so on. you can make it more intelligent

   if (first2Letters == "xx") { }//do whatever you want
   if (next2Letters == "yy")  { }//do whatever you want
   }

return 0;
}
0
 
TriskelionCommented:
I think we lost JSpat.
0
Question has a verified solution.

Are you are experiencing a similar issue? Get a personalized answer when you ask a related question.

Have a better answer? Share it in a comment.

All Courses

From novice to tech pro — start learning today.