Cum verifici dacă un caracter este un număr în c? [închis] (Programare, C, Char, Atof)

agupta2450 a intrebat.

Eu folosesc atof(word), , unde cuvântul este un char tip. Funcționează atunci când cuvântul este un număr, cum ar fi 3 sau 2, dar atof nu face distincție atunci când cuvântul este un operator, cum ar fi "+". Există o modalitate mai bună de a verifica dacă char-ul este un număr?

Sunt începător în CS, așa că sunt destul de confuz cu privire la modul în care să fac acest lucru în mod corespunzător.

Comentarii

  • atof() nu acceptă un char ci ia un tip char un pointer la un șir de caractere, adică un null de octeți terminată cu null. –  > Por Iharob Al Asimi.
  • Verificați un singur char ca '7' sau o înșiruire ca "1234"? –  > Por chux – Reintroduceți-o pe Monica.
  • Am un fișier text care are numere în el, acestea pot fi cu o singură cifră sau cu mai multe cifre, citesc cuvintele unul câte unul și verific dacă cuvântul este un număr –  > Por agupta2450.
4 răspunsuri
Iharob Al Asimi

Da, există, strtol(). Exemplu

char *endptr;
const char *input = "32xaxax";
int value = strtol(input, &endptr, 10);
if (*endptr != '')
    fprintf(stderr, "`%s' are not numbers
");

Textul de mai sus ar imprima "xaxaxax’ nu sunt numere”`.

Ideea este că această funcție se oprește atunci când găsește un caracter care nu este numeric și face endptr indică locul în care a apărut caracterul nenumeric în pointerul original. Aceasta nu va lua în considerare și „operator” ca o valoare nenumerică, deoarece "+10" este convertibilă în 10 deoarece semnul este folosit ca semn al numărului, dacă doriți să analizați caracterul „operator” între doi operanzi aveți nevoie de un parser, unul simplu ar putea fi scris folosind strpbrk(input, "+-*/"), , citiți manualul pentru strpbrk().

David Ranieri

Vrei să spui dacă un șir conține doar cifre?

#include <stdio.h>
#include <ctype.h>

int main(void)
{
    char *str = "241";
    char *ptr = str;

    while (isdigit(*ptr)) ptr++;
    printf("str is %s number
", (ptr > str) && (*str == 0) ? "a" : "not a");
    return 0;
}

dbush

Dacă verificați un singur char, , utilizați isdigit funcția .

#include <stdio.h>
#include <ctype.h>

int main()
{
    printf("2 is digit: %s
", isdigit('2') ? "yes" : "no");
    printf("+ is digit: %s
", isdigit('+') ? "yes" : "no");
    printf("a is digit: %s
", isdigit('a') ? "yes" : "no");
}

Ieșire:

2 is digit: yes
+ is digit: no
a is digit: no

Comentarii

  • Ho did you exactly got 2 este cifra: 1? –  > Por Michi.
  • @Michi A rescris ieșirea pentru a o face mai clară. –  > Por dbush.
JJGong

Presupunând că prin cuvânt vă referiți la un șir de caractere, care în C, este fie un char*, fie un char[].

Personal, aș folosi atoi()

This function returns the converted integral number as an int value. If no valid conversion could be performed, it returns zero.

Exemplu:

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

void is_number(char*);

int main(void) {
    char* test1 = "12";
    char* test2 = "I'm not a number";

    is_number(test1);
    is_number(test2);
    return 0;
}

void is_number(char* input){
    if (atoi(input)!=0){
        printf("%s: is a number
", input);
    }
    else
    {
        printf("%s: is not a number
", input);
    }
    return;
}

Output:

12: is a number
I'm not a number: is not a number

Cu toate acestea, dacă verificați doar un singur caracter, atunci folosiți isdigit()

Tags:, ,