2009-10-24 6 views
6

क्या सी में अंग्रेजी वर्णमाला में दिए गए चरित्र की स्थिति को पुनर्प्राप्त करने का कोई त्वरित तरीका है?सी भाषा में वर्णमाला में चरित्र की स्थिति कैसे प्राप्त करें?

कुछ की तरह:

int position = get_position('g'); 

उत्तर

26
int position = 'g' - 'a' + 1; 

सी में, char मूल्यों int मूल्यों के लिए परिवर्तनीय हैं और उनके ASCII मूल्यों पर ले लो। इस मामले में, 'a' 97 और 'g' के समान है 103. चूंकि वर्णमाला ASCII वर्ण सेट के भीतर संगत है, इसलिए आपके मूल्य से 'a' घटाकर इसकी सापेक्ष स्थिति मिलती है। यदि आप 'a' को पहले (शून्य के बजाए) स्थिति मानते हैं तो 1 जोड़ें।

+0

बहुत अच्छा धन्यवाद – goe

+5

ध्यान दें कि ASCII सी मानक का हिस्सा नहीं है। यह किसी भी प्रणाली पर काम करने के लिए पर्याप्त रूप से लगभग सर्वव्यापी है जिसे आप व्यावहारिक रूप से पा सकते हैं। मानक गारंटी देता है कि अंक चरित्र सेट में संगत हैं, लेकिन वर्णमाला नहीं (जो आपको ईबीसीडीआईसी के मामले में गड़बड़ कर देगी, लेकिन गंभीरता से, जो अब ईबीसीडीआईसी की परवाह करता है?)। –

+2

मेरे पिता अभी भी कोबोल में ईबीसीडीआईसी का उपयोग करते हैं। वह बोइंग सामान रखता है। -_- – GManNickG

3

आपको शायद ऊपरी/निचले मामले को भी ध्यान में रखना चाहिए। मेरे expereince में, 1 से गिनती, अक्सर खतरनाक है क्योंकि यह एक-एक-एक बग का कारण बन सकता है। अंगूठे के नियम के रूप में मैं हमेशा उपयोगकर्ता के साथ बातचीत करते समय 1-आधारित इंडेक्स में परिवर्तित होता हूं, और भ्रम से बचने के लिए आंतरिक रूप से 0-आधारित गिनती का उपयोग करता हूं।

int GetPosition(char c) 
{ 
    if (c >= 'a' && c <= 'z') { 
     return c - 'a'; 
    } 
    else if (c >= 'A' && c <= 'Z') { 
     return c - 'A'; 
    } 
    else { 
     // Indicate that it isn't a letter. 
     return -1; 
    } 
} 
+1

आप 'ctype.h' शीर्षलेख में 'tolower()' या 'toupper()' का उपयोग करके इसे सरल बना सकते हैं ताकि आपको निम्न- और अपरकेस दोनों की जांच न करनी पड़े। –

4

यह EBCDIC साथ काम करते हैं और केस-संवेदी है जाएगा:

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

int getpos (char c) 
{ 
    int pos; 
    const char * alphabet = "abcdefghijklmnopqrstuvwxyz"; 
    const char * found; 

    c = tolower ((unsigned char)c); 
    found = strchr (alphabet, c); 
    pos = found - alphabet; 
    if (!found) 
     pos = 0; 
    else if (pos == 26) 
     pos = 0; 
    else 
     pos++; 
    return pos; 
} 

int main() 
{ 
    char tests[] = {'A', '%', 'a', 'z', 'M', 0}; 
    char * c; 
    for (c = tests; *c; c++) { 
     printf ("%d\n", *c - 'a' + 1); 
     printf ("%d\n", getpos (*c)); 
    } 
    return 0; 
} 

http://codepad.org/5u5uO5ZR देखें अगर आप इसे चलाना चाहते हैं।

+0

+1 strchr! 4321 –

संबंधित मुद्दे

 संबंधित मुद्दे