Skip to content
  • Categories
  • Recent
  • Tags
  • Popular
  • World
  • Users
  • Groups
Skins
  • Light
  • Cerulean
  • Cosmo
  • Flatly
  • Journal
  • Litera
  • Lumen
  • Lux
  • Materia
  • Minty
  • Morph
  • Pulse
  • Sandstone
  • Simplex
  • Sketchy
  • Spacelab
  • United
  • Yeti
  • Zephyr
  • Dark
  • Cyborg
  • Darkly
  • Quartz
  • Slate
  • Solar
  • Superhero
  • Vapor

  • Default (No Skin)
  • No Skin
Collapse
Code Project
  1. Home
  2. General Programming
  3. C / C++ / MFC
  4. CString

CString

Scheduled Pinned Locked Moved C / C++ / MFC
question
14 Posts 9 Posters 0 Views 1 Watching
  • Oldest to Newest
  • Newest to Oldest
  • Most Votes
Reply
  • Reply as topic
Log in to reply
This topic has been deleted. Only users with topic management privileges can see it.
  • H Hamid Taebi

    See

    isdigit();

    How to read your string?

    _**


    **_

    WhiteSky


    K Offline
    K Offline
    kakan
    wrote on last edited by
    #5

    CString m_Str; m_Str="123ABC"; Index=atoi(m_Str);//return value is 123 Gives 123 too, and m_Str doesn't contain only numbers...

    Alcohol. The cause of, and the solution to, all of life's problems - Homer Simpson

    1 Reply Last reply
    0
    • S speedy4711

      Hi, is there an easy way (a function) to test if a CString contains only numbers? Thanks

      J Offline
      J Offline
      Jorgen Sigvardsson
      wrote on last edited by
      #6

      Here's a small function I use for validating user input:

      bool IsNumeric(const CString& str)
      {
      if(str.IsEmpty())
      return false;

      for(int i = 0; i < str.GetLength(); i++)
      	if(str\[i\] < '0' || str\[i\] > '9')
      		return false;
      
      return true;
      

      }

      It only takes decimal non-negative integers into account. It's easy to extend for other types of numbers, should you want to.

      -- Mit viel Oktan und frei von Blei, eine Kraftstoff wie Benziiiiiiin!

      S 1 Reply Last reply
      0
      • S speedy4711

        Hi, is there an easy way (a function) to test if a CString contains only numbers? Thanks

        _ Offline
        _ Offline
        _AnsHUMAN_
        wrote on last edited by
        #7

        speedy4711 wrote:

        test if a CString contains only numbers?

        here's one more solution. You can give this a try...

        CString s="253453";
        CComVariant v;
        v=s;
        if(v.ChangeType(VT_INT)==S_OK)
        {
        	CString str;str.Format ("%d",v.intVal );
        	AfxMessageBox (str);
        }
        

        Somethings seem HARD to do, until we know how to do them. ;-)_AnShUmAn_

        1 Reply Last reply
        0
        • S speedy4711

          Hi, is there an easy way (a function) to test if a CString contains only numbers? Thanks

          K Offline
          K Offline
          KarstenK
          wrote on last edited by
          #8

          I looked over the responses, and I want to point to two possible problems. The first may be a leading Zero ( "0123" ) and the other is a value with a comma or a sign ( "-1,5" or "+ 2.7" ) I would resolve this with checking every char of being a digit or allowed other char.

          Greetings from Germany

          1 Reply Last reply
          0
          • _ _AnsHUMAN_

            speedy4711 wrote:

            CString contains only numbers?

            CString str="1142654";
            int i=atoi (str);
            CString str1;str1.Format("%d",i);
            if(str.GetLength ()==str1.GetLength ())
            	AfxMessageBox("string is pure number");
            else 
            	AfxMessageBox ("Characters exist");
            

            Somethings seem HARD to do, until we know how to do them. ;-)_AnShUmAn_

            S Offline
            S Offline
            SilentSilent
            wrote on last edited by
            #9

            _AnShUmAn_ wrote:

            if(str.GetLength ()==str1.GetLength ())

            Doesn't work with eg. CString str="0x1142654";

            _ 1 Reply Last reply
            0
            • J Jorgen Sigvardsson

              Here's a small function I use for validating user input:

              bool IsNumeric(const CString& str)
              {
              if(str.IsEmpty())
              return false;

              for(int i = 0; i < str.GetLength(); i++)
              	if(str\[i\] < '0' || str\[i\] > '9')
              		return false;
              
              return true;
              

              }

              It only takes decimal non-negative integers into account. It's easy to extend for other types of numbers, should you want to.

              -- Mit viel Oktan und frei von Blei, eine Kraftstoff wie Benziiiiiiin!

              S Offline
              S Offline
              SilentSilent
              wrote on last edited by
              #10

              Jörgen Sigvardsson wrote:

              for(int i = 0; i < str.GetLength(); i++) if(str[i] < '0' || str[i] > '9') return false;

              Doesn't work with eg. CString str="0x1142654";

              J 1 Reply Last reply
              0
              • S SilentSilent

                Jörgen Sigvardsson wrote:

                for(int i = 0; i < str.GetLength(); i++) if(str[i] < '0' || str[i] > '9') return false;

                Doesn't work with eg. CString str="0x1142654";

                J Offline
                J Offline
                Jorgen Sigvardsson
                wrote on last edited by
                #11

                How often do you accept hexadecimal user input? And how hard would it be to extend it? I never claimed it would recognize all possible numeric syntaxes...

                -- Mit viel Oktan und frei von Blei, eine Kraftstoff wie Benziiiiiiin!

                1 Reply Last reply
                0
                • S SilentSilent

                  _AnShUmAn_ wrote:

                  if(str.GetLength ()==str1.GetLength ())

                  Doesn't work with eg. CString str="0x1142654";

                  _ Offline
                  _ Offline
                  _AnsHUMAN_
                  wrote on last edited by
                  #12

                  SilentSilent wrote:

                  Doesn't work with eg.

                  Since this value you are entering is a string x is treated as a character only, it doesn't represent a hexadecimal number nor did I check for this.So I would try and provide a solution for this... Thanks for pointing this out...

                  Somethings seem HARD to do, until we know how to do them. ;-)_AnShUmAn_

                  1 Reply Last reply
                  0
                  • S speedy4711

                    Hi, is there an easy way (a function) to test if a CString contains only numbers? Thanks

                    D Offline
                    D Offline
                    David Crow
                    wrote on last edited by
                    #13

                    Why don't you just use strtol()?


                    "Talent without discipline is like an octopus on roller skates. There's plenty of movement, but you never know if it's going to be forward, backwards, or sideways." - H. Jackson Brown, Jr.

                    "Judge not by the eye but by the heart." - Native American Proverb

                    1 Reply Last reply
                    0
                    • S speedy4711

                      Hi, is there an easy way (a function) to test if a CString contains only numbers? Thanks

                      Z Offline
                      Z Offline
                      Zac Howland
                      wrote on last edited by
                      #14

                      Here is a base-10 checker that allows for ,'s and -'s (but doesn't check for placement). You can easily extend it to check for proper placement of special characters (,'s, and -'s) as well as other base numbers and floating point numbers.

                      // function to check for base-10 digits only
                      bool is_digit_base10(const CString& str)
                      {
                      	static CString allowedChars = _T("0123456789,-");
                      	const unsigned int length = str.GetLength();
                      	for (unsigned int i = 0; i < length; ++i)
                      	{
                      		char buffer[2] = {0};
                      		buffer[0] = str[i];
                      		if (-1 == allowedChars.FindOneOf(buffer))
                      		{
                      			return false;
                      		}
                      	}
                      	return true;
                      }
                      

                      If you decide to become a software engineer, you are signing up to have a 1/2" piece of silicon tell you exactly how stupid you really are for 8 hours a day, 5 days a week Zac

                      1 Reply Last reply
                      0
                      Reply
                      • Reply as topic
                      Log in to reply
                      • Oldest to Newest
                      • Newest to Oldest
                      • Most Votes


                      • Login

                      • Don't have an account? Register

                      • Login or register to search.
                      • First post
                        Last post
                      0
                      • Categories
                      • Recent
                      • Tags
                      • Popular
                      • World
                      • Users
                      • Groups