Char-array converteren naar enkele int?

Iemand die weet hoe je een char-array naar een enkele int kunt converteren?

char hello[5];
hello = "12345";
int myNumber = convert_char_to_int(hello);
Printf("My number is: %d", myNumber);

Antwoord 1, autoriteit 100%

Er zijn meerdere manieren om een string om te zetten naar een int.

Oplossing 1: Legacy C-functionaliteit gebruiken

int main()
{
    //char hello[5];     
    //hello = "12345";   --->This wont compile
    char hello[] = "12345";
    Printf("My number is: %d", atoi(hello)); 
    return 0;
}

Oplossing 2: lexical_castgebruiken (meest geschikt en eenvoudigst)

int x = boost::lexical_cast<int>("12345"); 

Oplossing 3: C++ Streams

gebruiken

std::string hello("123"); 
std::stringstream str(hello); 
int x;  
str >> x;  
if (!str) 
{      
   // The conversion failed.      
} 

Antwoord 2, autoriteit 20%

Als u C++11gebruikt, moet u waarschijnlijk stoigebruiken omdat het onderscheid kan maken tussen een fout en het ontleden van "0".

try {
    int number = std::stoi("1234abc");
} catch (std::exception const &e) {
    // This could not be parsed into a number so an exception is thrown.
    // atoi() would return 0, which is less helpful if it could be a valid value.
}

Opgemerkt moet worden dat “1234abc” impliciet geconverteerd isvan een char[]naar een std:stringvoordat het wordt doorgegeven aan stoi().


Antwoord 3, autoriteit 5%

Gebruik sscanf

/* sscanf example */
#include <stdio.h>
int main ()
{
  char sentence []="Rudolph is 12 years old";
  char str [20];
  int i;
  sscanf (sentence,"%s %*s %d",str,&i);
  printf ("%s -> %d\n",str,i);
  return 0;
}

Antwoord 4, autoriteit 5%

Ik gebruik :

int convertToInt(char a[1000]){
    int i = 0;
    int num = 0;
    while (a[i] != 0)
    {
        num =  (a[i] - '0')  + (num * 10);
        i++;
    }
    return num;;
}

Antwoord 5, autoriteit 2%

Ik laat dit hier gewoon achter voor mensen die geïnteresseerd zijn in een implementatie zonder afhankelijkheden.

inline int
stringLength (char *String)
    {
    int Count = 0;
    while (*String ++) ++ Count;
    return Count;
    }
inline int
stringToInt (char *String)
    {
    int Integer = 0;
    int Length = stringLength(String);
    for (int Caret = Length - 1, Digit = 1; Caret >= 0; -- Caret, Digit *= 10)
        {
        if (String[Caret] == '-') return Integer * -1;
        Integer += (String[Caret] - '0') * Digit;
        }
    return Integer;
    }

Werkt met negatieve waarden, maar kan niet overweg met niet-numerieke tekens ertussen (moet wel gemakkelijk kunnen worden toegevoegd). Alleen gehele getallen.


Antwoord 6, autoriteit 2%

Bijvoorbeeld, “mcc” is een char-array en “mcc_int” is het gehele getal dat u wilt krijgen.

char mcc[] = "1234";
int mcc_int;
sscanf(mcc, "%d", &mcc_int);

Antwoord 7

Met cstring en cmath:

int charsToInt (char* chars) {
    int res{ 0 };
    int len = strlen(chars);
    bool sig = *chars == '-';
    if (sig) {
        chars++;
        len--;
    }
    for (int i{ 0 }; i < len; i++) {
        int dig = *(chars + i) - '0';
        res += dig * (pow(10, len - i - 1));
    }
    res *= sig ? -1 : 1;
    return res;
}

Antwoord 8

Om een lang verhaal kort te maken, je moet atoi()

ed:

Als je hierin geïnteresseerd bent op de juiste manier:

char szNos[] = "12345";
char *pNext;
long output;
output = strtol (szNos, &pNext, 10); // input, ptr to next char in szNos (null here), base 

Antwoord 9

Conversie van Ascii-tekenreeks naar geheel getal wordt gedaan door de functie atoi().

Other episodes