harwind

harwind

C++ String to Integer Conversion

I’m working on a C++ program where I need to convert a string containing a numeric value into an integer. I want to ensure that this conversion is handled correctly and safely, especially when dealing with potential exceptions or invalid input.

Here’s a simplified example of what I’m trying to do:

#include <iostream>
#include <string>

int main() {
    std::string str = "12345"; // This could be any numeric string.

    // How can I safely convert the string 'str' to an integer?

    int num = ???; // The converted integer should be stored here.

    std::cout << "Converted integer: " << num << std::endl;

    return 0;
}

In this code, I have a string str containing a numeric value. I want to convert this string into an integer variable num . However, I want to handle potential issues gracefully, such as cases where the string is not a valid integer. Could you offer a C++ code sample illustrating the proper and secure approach to convert a string to an integer while managing any potential exceptions or errors? I appreciate you helping me. I attempted to visit multiple sites like Scaler to locate the answer, but I was unable to do so. Thank you.

Most Liked

gulshan212

gulshan212

Well, I can see some logical issues with your code.
Can you try this code and confirm wether it is working or not.

#include <iostream>
#include <string>
#include <stdexcept> // Include this for std::invalid_argument and std::out_of_range

int main() {
    std::string str = "12345"; // This could be any numeric string.

    int num = 0; // The converted integer will be stored here.

    try {
        num = std::stoi(str);
        std::cout << "Converted integer: " << num << std::endl;
    } catch (const std::invalid_argument& e) {
        std::cerr << "Invalid argument: " << e.what() << std::endl;
    } catch (const std::out_of_range& e) {
        std::cerr << "Out of range: " << e.what() << std::endl;
    }

    return 0;
}

Thanks

Eiji

Eiji

I’m not a senior C++ developer, so I have no idea about the best way, but this should work:

#include <iostream>
#include <string>
#include <cctype>

int main() {
  std::string str = "123";
  // str[0] - gets the first character
  // isdigit(character) - checks if character is a digit
  // stoi throws invalid_argument exception
  // if string does not start with a digit
  if (isdigit(str[0])) {
    /*
    stoi means "String TO Integer"
    you can easily change it to for example:
      * stof ("String TO Float"),
      * stol ("String TO Long")
      * and so on …
    */
    int num = std::stoi(str);
    std::cout << "[DONE] Converted integer: " << num << std::endl;
  } else {
    std::cout << "[ERROR] Invalid input string: " << str << std::endl;
  }

  return 0;
}

Helpful resources

  1. Reference : string : stoi
  2. Reference : cctype : isdigit
Eiji

Eiji

For me looks good. I have tested it on my MX Linux distribution.

It’s interesting how much the code says about it’s author. In my case 7 years in Elixir gives result …

  1. Even if somehow I remember somewhat about try/catch I was still looking for a “better” solution, so I have added one extra dependency for a single isdigit call. :sweat_smile:

  2. std:err of course! When I saw your code I have reminded it immediately. :older_man:

  3. stdexcept is interesting. Maybe I have used it, but I don’t remember it much especially e.what() call. I guess that I haven’t used multiple catch blocks before in C++. :bulb:

  4. out_of_range error handling is simple, but also brilliant idea. I’m not surprised that I wasn’t thinking about such edge case since in Elixir we have just Integer for all well … integers (no small or big ones). :+1:

  5. I only wonder why you define num variable outside of try block having in mind it’s only usage is within it, but that’s definitely not the most important thing. :thinking:

So much to learn in such a small code, thanks! :open_book:

Adding additional links below to the documentation pages:

  1. Reference : stdexcept : invalid_argument
  2. Reference : stdexcept : out_of_range

Where Next?

Popular General Dev topics Top

Devtalk
Reading something? Working on something? Planning something? Changing jobs even!? If you’re up for sharing, please let us know what you’...
1052 22283 402
New
AstonJ
The obligatory speed test thread :smiley: Check here: https://www.speedtest.net When complete, click on the share link and copy and pas...
New
AstonJ
A thread that every forum needs! Simply post a link to a track on YouTube (or SoundCloud or Vimeo amongst others!) on a separate line an...
New
chasekaylee
Hi there! I have some old Bose in ear noise cancelling headphones that have worked like a champ for the past 3 years and was maybe due fo...
New
AstonJ
The dev world doesn’t sit still, in fact it is probably one of the fastest paced industries around - meaning to stay current we are conti...
New
jamiedumont
This is all going to be a bit hand-wavey and straight off the top of my head, so bear with me, but it’s a thought/debate that’s been ratt...
New
AstonJ
Continuing the discussion from Thinking about learning Crystal, let’s discuss - I was wondering which languages don’t GC - maybe we can c...
New
Exadra37
A modern streaming platform for mission critical workloads Redpanda is a Kafka® compatible event streaming platform. No Zookeeper®, no JV...
New
harwind
I’m working on a Spring Boot project and I have a controller where I want to map multiple request paths to a single method. Let’s say I h...
New
AstonJ
Thought this would be a nice way to start the year - have you seen or written a function (or method) or piece of code that you are partic...
New

Other popular topics Top

AstonJ
If it’s a mechanical keyboard, which switches do you have? Would you recommend it? Why? What will your next keyboard be? Pics always w...
New
ohm
Which, if any, games do you play? On what platform? I just bought (and completed) Minecraft Dungeons for my Nintendo Switch. Other than ...
New
PragmaticBookshelf
From finance to artificial intelligence, genetic algorithms are a powerful tool with a wide array of applications. But you don't need an ...
New
New
New
PragmaticBookshelf
Author Spotlight: VM Brasseur @vmbrasseur We have a treat for you today! We turn the spotlight onto Open Source as we sit down with V...
New
First poster: AstonJ
Jan | Rethink the Computer. Jan turns your computer into an AI machine by running LLMs locally on your computer. It’s a privacy-focus, l...
New
AstonJ
This is a very quick guide, you just need to: Download LM Studio: https://lmstudio.ai/ Click on search Type DeepSeek, then select the o...
New
AstonJ
Curious what kind of results others are getting, I think actually prefer the 7B model to the 32B model, not only is it faster but the qua...
New
PragmaticBookshelf
Use advanced functional programming principles, practical Domain-Driven Design techniques, and production-ready Elixir code to build scal...
New