Converting string to integer using atoi in C++

In summary, the conversation discusses a problem with a C++ program that aims to reverse a string, convert it to an integer, and find its integer square root. The code provided includes a for loop that iterates 50 times, but the conversation points out that this is not necessary and may cause issues with strings of different lengths. The main issue with the code is that the program does not store the reversed string as anything, causing the conversion to an integer to fail. The conversation suggests using the atoi function and initializing the value of L before the for loop. It also introduces the idea of using std::string instead of char arrays and provides a code example using this approach.
  • #1
zarentina
12
0
Hello, the problem that I was asked to complete was ; Write a program that inputs a string and reverses it. After the string has been reversed you must convert it to an integer and then take the square root of the integer. (using atoi)
My code is as follows:
Code:
int main ()
{
    int i=0,L=50, S,x,;
    double z;
    char ori_string[50];
    char new_string[50];
    cout<<"Please enter a long string"<<endl;
    cin.getline(ori_string,50);
    
    for(i=0;i<L; i++)
    {
                 new_string[i]=ori_string[L-1-i];
    }
    for(L=50-strlen(ori_string);L<50;L++)
    {
                                        
                                         cout<<new_string[L];
     }
cout<<endl;
{
     x=atoi(new_string);
     z=sqrt(x);
     cout<<"The square root of the reversed string is: "<<z<<endl;
}
    system("pause");
	return 0;
}

My problem is that my program isn't storing "new_string[L]" as anything so when I convert it to a integer nothing is there and the square root is zero. So my question to you all is how can i store "new_string[L]" so I can convert it to an integer using atoi?

Any advice would be delightful!
Thanks,
Z
 
Technology news on Phys.org
  • #2
I don't know too much about C++ but atoi is string to int and atol is strong to long int.

Your code also seems to have a lot of stuff in it just to reverse a string and find its integer square root.

For example, why would you need anything to do 50 iterations?
 
  • #3
First of all - you can't reverse the string assuming its length is 50 characters. What happens if it is not?

new_string[L] is a character (element of the new_string array), not a string. You don't have to write new_string to cout character by character, cout << new_string should work.

There is more, but I am not going to mention anything else now to not muddy the water.
 
  • #4
When I first wrote this program to reverse my number I simply had
Code:
int main()
{
    int i,L,;
    char ori_string[50];
    char new_string[50];
    cout<<"Please enter a long string"<<endl;
    cin.getline(ori_string,50); 
 
     for(i=0;i<L; i++)
     {
            cout<<ori_string[L-1-i];
     }
         system("pause");
	return 0;
}

This returned the proper number but it was preceded by random characters for the first 46 spaces if the string was 3 digits long. This was the reasoning of structuring a second for loop. Yet now that I know that is the incorrect method, how do you suggest I fix this bit of code here so that it will only output the reverse of the string for after it does that I can easily convert it to an int and take the square root.

(I know this differs from my initial question but I'm reasonably certain that this is where the problem is, yet if this assumption is wrong please let me know!)

Thanks,
Z
 
  • #5
Hint: L is not initialized.

Hint2: with what should it be initialized?
 
  • #6
*UPDATE* I had a revelation sparked by a few of your comments:smile:

Code:
int main()
{
    int i,L=50,x;
    double z;
    char ori_string[L];
    char new_string[L];
    cout<<"Please enter a long string"<<endl;
    cin.getline(ori_string,50);
    L=strlen(ori_string); 
 
     for(i=0;i<L; i++)
     {
            
            cout<<ori_string[L-1-i];
            new_string[i]=ori_string[L-1-i];
     }

     {
     x=atol(new_string);
     z=sqrt(x);
     cout<<"The square root of the reversed string is: "<<z<<endl;
}
         system("pause");
	return 0;
}

Is my new properly working code, if there are any critiques or overhauls you may do feel free, I'd love to learn!

Thanks,
Z
 
  • #7
Hi Z! Welcome to PF! :smile:

You're code will work properly.

If you want to learn I'll give you an improvement.
Your program won't function better, but it is better programming style.

In C++ we don't really want to use char-arrays anymore (it's a remnant from its predecessor C).
There are a number of pitfalls with them.
In this case the most obvious ones are that you have a maximum size (50) and that you truncate your input.

The C++ way to do things, is to use std::string.
It works like this:
Code:
#include <string>

int main()
{
    int i, L, x;
    double z;
    std::string ori_string;
    std::string new_string;
    cout << "Please enter a long string" << endl;
    getline(cin, ori_string);
    
    L = ori_string.length();
    new_string.resize(L);
    for (i = 0; i < L; i++)
    {
        cout << ori_string[L - 1 - i];
        new_string[i] = ori_string[L - 1 - i];
    }

    x = atol(new_string.c_str());
    z = sqrt(x);
    cout << "The square root of the reversed string is: " << z << endl;

    system("pause");
    return 0;
}
 

1. What is the purpose of converting a string to an integer using atoi in C++?

The function atoi in C++ allows you to convert a string of numbers into an integer data type. This is useful when dealing with user input or when manipulating numerical data in a program.

2. How does atoi in C++ work?

When the atoi function is called, it reads through the string character by character until it reaches a non-numeric character. It then converts the numeric characters it has read into an integer and returns the result. If the string contains non-numeric characters at the beginning, the function will return 0.

3. What happens if the string cannot be converted to an integer using atoi?

If the string contains non-numeric characters or if the number is too large to be represented as an integer, the function will return 0. It is important to handle these cases in your code to avoid unexpected errors.

4. Are there any limitations to using atoi in C++?

Yes, there are some limitations to using atoi in C++. First, it can only convert strings representing integers. This means that any decimal points or non-numeric characters will not be converted. Additionally, atoi can only convert numbers within the range of an integer data type, typically -2,147,483,648 to 2,147,483,647.

5. Can I use atoi to convert a string to a different data type?

No, the atoi function is specifically designed to convert strings to integers. If you need to convert a string to another data type, such as a floating point number, you will need to use a different function or method specific to that data type.

Similar threads

  • Programming and Computer Science
Replies
12
Views
1K
  • Programming and Computer Science
Replies
5
Views
2K
  • Programming and Computer Science
Replies
4
Views
5K
  • Programming and Computer Science
Replies
5
Views
848
  • Programming and Computer Science
Replies
5
Views
4K
  • Programming and Computer Science
3
Replies
89
Views
4K
  • Programming and Computer Science
Replies
30
Views
2K
  • Programming and Computer Science
Replies
23
Views
2K
Replies
10
Views
905
  • Programming and Computer Science
4
Replies
118
Views
6K
Back
Top