2015-07-08 6 views
-9

У меня есть строка, содержащая 12 символов, и вы хотите преобразовать ее в int или мы можем сказать цифру, но не можем ее сделать. Я написал код, который преобразует строку до 11 цифр, но после этого начинает давать значение для мусора. мой код, какпреобразовать строку в int в c

#include<stdio.h> 
double myAtoi(char *str); 
void main() 
{ 
    double n; 
    double m; 
    char* a="12345678912"; 
    char* b="34"; 
    n=myAtoi(a); 
    //m=atoi(b); 
    printf("\nconversion is : %d",(n)); 
} 

double myAtoi(char *str) 
{ 
    printf("\nstr : %s",str); 
    long res = 0; // Initialize result 
    long i ; 
    // Iterate through all characters of input string and update result 
    for (i = 0; str[i] != '\0'; ++i) 
    { 
     res = res*10 + str[i] - '0'; 
     printf("\n res : %d",res); 
     //x=res; 
    } 
    return res; 
} 
+1

Ответ на C++ будет радикально отличаться. Вы уверены, что хотите этого? Если нет, то как C++ относится к этому вопросу? – user2079303

+1

Пожалуйста, открепите свой код. – Lundin

+2

Я подозреваю, что вы имеете в виду 'return res;', поскольку в этом коде ничего не сказано «x». И ваша строка формата 'printf' неверна, поэтому вы, вероятно, напечатаете мусор, даже если исправите это. – molbdnilo

ответ

0

Я думаю, что этот вопрос вы не можете держать «12345678912» к длинной переменной. см http://www.tutorialspoint.com/cprogramming/c_data_types.htm

максимального значения, которое может удерживать в течение длительного переменной -2147483648 до 2147483647

и вы возвращаете неправильное значение из вашего method.return Реза вместо x.no необходимости х в том, что код.

+0

C задает _minimum_, диапазон 'long' равен -2,147,483,647 до 2,147,483,647. C не указывает его максимальный диапазон. '-2,147,483,648' до' 2,147,483,647' является общим диапазоном. – chux

3

Bugs:

  • Что такое x? Где это объявлено? Почему вы прокомпилировали код, копирующий res в x? Почему вы скопировали его внутри цикла, а не в конце функции? Вам даже не нужно x, просто return (double)res;, если вы настаиваете на использовании двойного, по неизвестным причинам.
  • 12345678912 составляет 12,3 миллиарда. Обычно long может соответствовать только 2^32/2 = 2,14 миллиарда как наибольшее число. Рассмотрим использование long long.
  • Вы печатаете длинный и двойной с %d спецификатором преобразования, который является неправильным в обоих случаях.
  • Возможно, вы даже не хотите использовать double в этой программе, это не имеет никакого смысла.

Другие вещи:

  • Поскольку это размещаемая система, главный должен быть объявлен как int main (void). Reference.
  • Всегда указывайте указатели на строковые литералы как const char*. Потому что вы никогда не будете писать в строковый литерал, только читайте его.
  • Параметр вашей функции также должен быть объявлен как const char*, для соответствия const.
1

Проблема в том, что long не может содержать номер, как большой, как «12345678912» вместо того, чтобы использовать unsigned long long.

Его спецификатор - "%llu".

А также в вашем коде x не delared использовать вместо return res;

Как вы используете unsigned long long вам необходимо изменить определение функции double myatoi() в unsigned long long myatoi() -

Ваша программа может быть переписана как ниже -

#include<stdio.h> 
unsigned long long myAtoi(char *str); 
int main() 
{ 

    unsigned long long n; // Note here n also changed from double to unsigned long long 
    double m; 
    char* a="12345678912"; 
    char* b="34"; 
    n=myAtoi(a); 
    //m=atoi(b); 
    printf("\nconversion is : %llu",(n)); 
} 

    unsigned long long myAtoi(char *str) 
{ 

    printf("\nstr : %s",str); 
    unsigned long long res = 0; // Initialize result 
    long i ; 
    // Iterate through all characters of input string and update result 
    for (i = 0; str[i] != '\0'; i++) 
    { 
     res = res*10 + str[i] - '0'; 
     printf("\n res : %llu",res); 
     //x=res; 
    } 
    return res; 
} 
+0

большое спасибо. он отлично работает ... –

+0

@AniketAmrutkar Общее правило, если оно помогло принять ответ, не беспокойтесь о вашей программе :). – ameyCU

Смежные вопросы