Converting String to Long in C
Last Updated :
10 Apr, 2023
Here, we will see how to build a C Program For String to Long Conversion using strtol() function.
Syntax:
long int strtol(char *string, char **ptr, int base)
- The first argument is given as a string
- The second argument is a reference to an object of type char*
- The third argument denotes the base in which the number is represented. To know more about visit strtol() function.
Note: We don’t have to use long int in the case of strtoul() because the range of unsigned long is greater than long on the positive front.
[long : -2147483648 to 2147483647 and unsigned long : 0 to 4294967295]
Syntax:
strtoul(char *string, char **ptr, int base) // no long int need in strtoul()
C
#include <stdio.h>
#include <stdlib.h>
int main()
{
char string[10] = "1234567890" ;
long integer;
integer = strtol (string, NULL, 10);
printf ( "Number is %lu" , integer);
}
|
Output
Number is 1234567890
C
#include <stdio.h>
#include <stdlib.h>
int main()
{
char string[40] = "100 GeeksforGeeks" ;
long integer;
char * ptr;
integer = strtol (string, &ptr, 10);
printf ( "Integer part is %lu\n" , integer);
printf ( "String part is %s\n" , ptr);
return 0;
}
|
Output
Integer part is 100
String part is GeeksforGeeks
Method: Using atol() function
C
#include <stdlib.h>
#include <stdio.h>
int main()
{
long l;
char *str;
str = "349639 geeksforgeeks" ;
l = atol (str);
printf ( "l = %.ld\n" ,l);
}
|
Method: Using ltoa()
C
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main()
{
long i = 1234;
char buffer[100];
ltoa(i, buffer, 10);
printf ( "string is %s\n" , buffer);
return 0;
}
|
Output
string is 1234
Method: Without Inbuilt Function
C
#include <stdio.h>
#include <stdlib.h>
int main()
{
char string[10] = "123456789" ;
long integer = 0;
int i = 0;
while (string[i] != '\0' ) {
integer = (integer * 10) + (string[i] - '0' );
i++;
}
printf ( "Number is %lu" , integer);
}
|
Output
Number is 123456789
Approach name: String to Long Conversion using Custom Algorithm
Steps:
- Initialize a variable ‘result’ to zero.
- Iterate through each character of the input string:
a. Multiply the result by 10.
b. Convert the current character to a digit by subtracting the ASCII value of ‘0’.
c. Add the digit to the result.
- Return the result.
C
#include <stdio.h>
#include <string.h>
long stringToLong( char *str) {
long result = 0;
int sign = 1, i = 0;
if (str[0] == '-' ) {
sign = -1;
i++;
}
for (; str[i] != '\0' ; i++) {
result = result * 10 + str[i] - '0' ;
}
return sign * result;
}
int main() {
char str[] = "123456789" ;
long result = stringToLong(str);
printf ( "%ld\n" , result);
return 0;
}
|
Time complexity: O(n), where n is the length of the input string.
Auxiliary space: O(1)
Method: Using sscanf() function
Here’s another approach to convert a string to a long integer in C:
- Include the “stdlib.h” and “stdio.h” header files in your program.
- Define a string variable to hold the input string.
- Use the “sscanf()” function to read the long integer from the input string
- Print the long integer using the “printf()” function.
C
#include <stdio.h>
#include <stdlib.h>
int main() {
char input[100] = "123456789" ;
long num;
sscanf (input, "%ld" , &num);
printf ( "%ld\n" , num);
return 0;
}
|
Time complexity: The time complexity of the “sscanf()” function is O(n), where n is the length of the input string.
Auxiliary space: The space complexity of the program is O(1), as we are not using any additional data structures to perform the conversion.
Like Article
Suggest improvement
Share your thoughts in the comments
Please Login to comment...