2009-06-23 34 views
7

मुझे लगता है मैं एक फ़ाइल linewise पढ़ रहा हूँ सी में एक बहुत ही सरल समस्या है, और एक बफरनिकालें पूर्णांक

char line[80]; 
में संग्रहीत

प्रत्येक पंक्ति निम्नलिखित संरचना है:

Timings results : 2215543 
Timings results : 22155431 
Timings results : 221554332 
Timings results : 2215543 

जो मैं करने की कोशिश कर रहा हूं, इस लाइन से पूर्णांक मान निकालना है। क्या सी यहां कोई साधारण कार्य प्रदान करता है जो मुझे ऐसा करने की अनुमति देता है?

धन्यवाद

उत्तर

2

हाँ - कोशिश atoi

int n=atoi(str); 

अपने उदाहरण में, आप तो आप बस इसे atoi को पार करने से पहले जोड़ सकता है एक szLine को ऑफसेट, पूर्णांक से पहले एक निश्चित उपसर्ग, उदा

int offset=strlen("Timings results : "); 
    int timing=atoi(szLine + offset); 

बहुत कुशल, लेकिन उन लाइनों के साथ अच्छी तरह से सामना नहीं करता है जो अपेक्षित नहीं हैं। आप पहली बार प्रत्येक पंक्ति की जांच कर सकता है, हालांकि:

const char * prefix="Timings results : "; 
    int offset=strlen(prefix); 
    char * start=strstr(szLine, prefix); 
    if (start) 
    { 
     int timing=atoi(start+offset); 

     //do whatever you need to do 
    } 
    else 
    { 
     //line didn't match 
    } 

आप भी इस तरह पार्स करने लाइनों, जो अधिक संक्षिप्त कोड के लिए बनाता है के लिए sscanf उपयोग कर सकते हैं:

int timing; 
    sscanf(szLine, "Timings results : %d", &timing); 

अंत में, आगे विचारों के लिए भी Parsing Integer to String C देखते हैं।

+1

तुम अब भी स्ट्रिंग पार्स करने में इसलिए नहीं कि atoi() वापसी 0 करता है, तो अपने स्ट्रिंग है एक गैर-संख्यात्मक मूल्य से शुरू होता है? – Makis

+1

'strtol'' atoi' से बेहतर है क्योंकि यह आपको त्रुटियों को संभालने की अनुमति देता है। –

12

तरह प्रति पंक्ति sscanf उपयोग कर सकते हैं,:

#include <stdio.h> 
int time; 
char* str = "Timings results : 120012"; 

int n = sscanf(str, "Timings results : %d", &time); 
इस मामले n == 1 में

सफलता का मतलब है

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