c - जांचें कि क्या स्ट्रिंग में सी में केवल संख्याएं हैं?




arrays char (4)

मैं यह जांचने के लिए एक साधारण कोड लिखने की कोशिश कर रहा हूं कि उसमें केवल एक स्ट्रिंग की संख्या है। अब तक यह काम नहीं कर रहा है, किसी भी मदद की सराहना की जाएगी।

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

int main()
{
    char numbers[10];
    int i, correctNum = 0;

    scanf("%s", numbers);

    for(i = 0 ; i <= numbers ; ++i)
    {
        if(isalpha(numbers[i]))
        {
            correctNum = 1;
            break;
        }
    }

    if(correctNum == 1)
    {
        printf("That number has a char in it. FIX IT.\n");
    }
    else
    {
        printf("All numbers. Good.\n");
    }
    return 0;
}

अन्य उत्तरों में जोड़ना, आप strtol का उपयोग यह निर्धारित करने के लिए भी कर सकते हैं कि क्या स्ट्रिंग में सभी नंबर हैं या नहीं। यह मूल रूप से स्ट्रिंग को पूर्णांक में कनवर्ट करता है, और किसी भी गैर-पूर्णांक को छोड़ देता है आप इस फ़ंक्शन के बारे में अधिक जानकारी के लिए मैन पेज पढ़ सकते हैं, और आप इसकी व्यापक त्रुटि जांच कर सकते हैं।

इसके अलावा, आपको उपयोग करना चाहिए:

scanf("%9s", numbers);

के बजाय:

scanf("%s", numbers);

बफर अतिप्रवाह से बचने के लिए

यहां कुछ उदाहरण कोड है:

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

#define MAXNUM 10
#define BASE 10

int main(void) {
    char numbers[MAXNUM];
    char *endptr;
    int number;

    printf("Enter string: ");
    scanf("%9s", numbers);

    number = strtol(numbers, &endptr, BASE);

    if (*endptr != '\0' || endptr == numbers) {
        printf("'%s' contains non-numbers\n", numbers);
    } else {
        printf("'%s' gives %d, which has all numbers\n", numbers, number);
    }

    return 0;
}

उदाहरण इनपुट 1:

Enter string: 1234

आउटपुट:

'1234' gives 1234, which has all numbers

उदाहरण इनपुट 2:

Enter string: 1234hello

आउटपुट:

'1234hello' contains non-numbers

आपके पास लूप में एक त्रुटि है - के लिए (i = 0; i <= संख्याएं; ++ i)

संख्या सूचक है और पूर्णांक के साथ इसकी तुलना मनाई गई है। सही कोड -

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

int main()
{
   char numbers[10];
   int i, correctNum = 0;

    scanf("%s", numbers);

    for(i = 0 ; i < strlen(numbers) ; ++i)
    {
       if(!(numbers[i]>='0' && numbers[i]<='9'))
       {
           correctNum = 1;
            break;
       }
    }

    if(correctNum == 1)
    {
         printf("That number has a char in it. FIX IT.\n");
     }
   else
    {
        printf("All numbers. Good.\n");
    }
    return 0;
 }

for(i = 0 ; i <= numbers ; ++i) //how is this supposed to work.

लूप को इनपुट की length से 0 से 1 कम तक चलाएं।

for(i = 0 ; i < strlen(numbers) ; ++i)

आप strspn का उपयोग करने पर विचार कर strspn :

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

int main(int argc, char* argv[]) {
    int i;
    for (i=1; i < argc; i++) {
        printf("%s %s\n",
            strlen(argv[i]) == strspn(argv[i], "0123456789") ? "digits" : "mixed",
            argv[i]
        );
    }
}

डेमो:

$ ./try foo 123 ba23a 123.4
mixed foo
digits 123
mixed ba23a
mixed 123.4

strspn पहली तर्क से वर्णों की प्रारंभिक संख्या देता है जो दूसरे तर्क में प्रकट होता है। सुपर सरल उदाहरण:

strspn("abba", "a");  // == 1
strspn("abba", "b");  // == 0
strspn("abba", "ab"); // == 2






isalpha