Ascii в целое число без использования библиотечных функций - PullRequest
1 голос
/ 06 марта 2019

Мой учитель дал нам задание, где мы создаем функцию, которая читает символы ASCII-цифр и преобразует их в число без использования каких-либо библиотечных функций, таких как atoi.В результате некоторых исследований я нашел это в своем собственном файле:

#include <stdio.h>
#include <sttdef.h>

int main() {

    char testString[] = "123";
    int convertedResult = 0;
    int i;

    for(i = 0; testString[i] != '\0'; i++){
        convertedResult = convertedResult*10 + testString[i] - '0';
        printf("%i\n",convertedResult);
        if (testString[i] == '\0') {
            break;
        }
    }
    return 0;
}

Хотя это работает само по себе, я должен использовать основной файл, который он нам дал, для вызова этой конкретной функции.

 char *asciiToInteger(char *inputString, int *integerPtr) {
     return inputString;
 }

Я немного озадачен тем, что делать дальше?привязанное изображение является основным

enter image description here

Ответы [ 3 ]

1 голос
/ 06 марта 2019

У вашего кода есть пара проблем:

  • Предполагается, что вся строка состоит из цифр
  • Проверяет конец строки дважды

Я думаю, что лучшая реализация будет:

#include <stdio.h>

const char *asciiToInteger(const char *inputString, int *value)
{
  int result = 0;
  while (isdigit((unsigned int) *inputString))
  {
    result *= 10;
    result += *inputString++ - '0';
  }
  *value = result;
  return inputString;
}

Возвращает указатель на первый не преобразованный символ, который может находиться в конце маркера строки, если строка состоит из всех цифр. Конечно, я добавил const в строки, так как этот конвертер просто читает из строк.

1 голос
/ 06 марта 2019

Когда вы получаете такое назначение, первым делом убедитесь, что вы понимаете, что должна делать функция.Ваш вопрос не имеет такого описания, так что с этого места начинать.

Из поведения функции main это выглядит примерно так:

  1. Еслипервый символ во входной строке - не возвращаемая цифра NULL

  2. Если первый символ во входной строке равен , то цифра преобразует все начальныецифры до целого числа, хранящегося в объекте, на который указывает integerPtr, и возвращают указатель на символ, следующий за преобразованными цифрами.

Примеры:

inputString = "a123b67" --> return NULL

inputString = "123b67"  --> *integerPtr = 123 and return a pointer to the 'b' in the input

Томожет выглядеть примерно так:

char *asciiToInteger(char *inputString, int *integerPtr) {
    if (*inputString < '0' || *inputString > '9') 
        return NULL;  // no leading digit

    *integerPtr = 0;
    do
    {
        *integerPtr = *integerPtr * 10 + *inputString - '0';
        ++inputString;
    } while (*inputString >= '0' && *inputString <= '9');
    return inputString;
}

Обратите внимание, что приведенный выше код не может обрабатывать отрицательные целые числа.

1 голос
/ 06 марта 2019
    #include <stdio.h>
    #include <stddef.h>  

    char * asciiToInteger(char *inputString, int *integerPtr){
           int convertedResult =0;

           for(int i = 0; inputString[i] != '\0'; i++){
            convertedResult = convertedResult*10 + inputString[i] - '0';

          }
          *integerPtr=convertedResult;


         return inputString;
         }

 int main() {  
    char testString[] = "123";
    int  integerPtr;
    asciiToInteger(testString, &integerPtr) ;
    printf("%d\n",integerPtr);

    return 0;
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...