akoluacik
akoluacik

Reputation: 43

Implementing string to int function in c

I am trying to implement a function as stated in the title. I think I am very close to solution but a problem.

input: 51% are admitted. output: x:51 (null)

but output should have been:

s:% are admitted.

My try is here:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int str2int(int);
int isdigit(int);
long str2double(int);

int driver(char *, char *);

int main(){
    char *s = "51% are admitted.";
    char *sPtr;
    int x = driver(s, sPtr);
    printf("x:%d sPtr:%s", x, sPtr);
    
    return 0;
}

int isdigit(int ch){
    return (ch>=48 && ch<=57)?1:0;
}

int str2int(int ch){
    return ch-48;
}

int driver(char *s, char *sPtr){
    int i=0, number=0;
    while(s[i]!='\0' && isdigit(s[i])){
        number = number*10 + str2int(s[i]);
        i++;
    }
    sPtr=s+i;
    printf("%s\n", sPtr);
    return number;
}

The problem is, in main, sPtr seems as null but in driver function, sPtr is % is admitted which is what it should be. How can I fix the problem so that I can print the solution correctly without using a printf statement in driver function?

EDIT:

The problem is as @Johnny Mopp said, I was trying to pass a copy of that variable. Therefore, I need to pass the address of variable of *sPtr which appears char **sPtr in prototype. And the code should be:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int str2int(int);
int isdigit(int);
long str2double(int);

int driver(char *, char **); 

int main(){
    char *s = "51% are admitted.";
    char **sPtr;
    int x = driver(s, &sPtr);
    printf("x:%d sPtr:%s", x, sPtr);
    
    return 0;
}

int isdigit(int ch){
    return (ch>=48 && ch<=57)?1:0;
}

int str2int(int ch){
    return ch-48;
}

int driver(char *s, char **sPtr){
    int i=0, number=0;
    while(s[i]!='\0' && isdigit(s[i])){
        number = number*10 + str2int(s[i]);
        i++;
    }
    *sPtr=s+i;
    return number;
}

Thanks for contributes of @Johnny Mopp and @paulsm4

Upvotes: 0

Views: 93

Answers (0)

Related Questions