C भाषामा स्ट्रिङ काट्ने पूर्ण गाइड | मानक, कस्टम, मल्टिबाइट

目次

1. परिचय

C भाषा मा स्ट्रिङ्गको सञ्चालन प्रोग्रामिङ सिक्ने क्रममा महत्वपूर्ण कौशल मध्ये एक हो। विशेष गरी, स्ट्रिङ्गको टुक्रा निकाल्ने(आंशिक स्ट्रिङ्गको निष्कर्षण)डेटा प्रशोधन र ढाँचा रूपान्तरण गर्दा प्रायः प्रयोग हुन्छ।

यस लेखमा, C भाषा मा स्ट्रिङ्ग टुक्रा निकाल्ने विधिहरू बारे, मानक पुस्तकालय कार्यहरू प्रयोग गर्ने तरिका, आफ्नै कार्य बनाउने तरिका, मल्टिबाइट क्यारेक्टर(जापानी)को समर्थन, स्ट्रिङ्ग विभाजन विधिहरू आदि विस्तृत रूपमा व्याख्या गर्नेछौं। साथै, अनुप्रयोग उदाहरणहरू र त्रुटि ह्यान्डलिङ्ग पनि प्रस्तुत गर्नेछौं, कृपया अन्त्यसम्म हेर्नुहोस्।

यस लेखमा सिक्न सकिने कुरा

यो लेख पढेर, तलका जस्ता कौशलहरू हासिल गर्न सक्नुहुन्छ।

  • C भाषा को स्ट्रिङको आधारभूत अवधारणा र समाप्ति वर्ण को भूमिका
  • strncpystrchrमानक पुस्तकालय फङ्सनहरू प्रयोग गरेर उपस्ट्रिङ निकाल्ने प्रक्रिया
  • स्वनिर्मित फङ्क्शन
  • मल्टिबाइट क्यारेक्टर (जापानी) लाई ध्यानमा राख्दै
  • strtokस्ट्रिङ्ग विभाजन गर्ने तरिका
  • विशिष्ट अक्षरको अगाडि र पछाडि प्राप्त गर्ने तरिका

शुरु गर्नेहरूका लागि पनि बुझ्न सजिलो बनाउने गरी, कोड उदाहरणहरू समेटेर व्याख्या गर्नेछौं।

किन C भाषा मा स्ट्रिङ्ग टुक्रा निकाल्ने महत्त्वपूर्ण छ?

C भाषा स्ट्रिङ्गलाई स्ट्रिङ्गलाई「एरे(char प्रकारको एरे)」को रूपमा व्यवहार गर्ने कारण, अन्य उच्च-स्तरीय भाषाहरू (Python वा JavaScript आदि) जस्तै सजिलै आंशिक स्ट्रिङ्ग प्राप्त गर्न सकिँदैन। त्यसैले, तलका जस्ता परिस्थितिहरूमा उपयुक्त विधि चयन गर्नु महत्त्वपूर्ण हुन्छ।

1. इनपुट डेटा प्रशोधन

उदाहरणका लागि, लग डेटा वा CSV फाइल जस्ता डेटा विश्लेषण गर्दा, विशेष आइटम निकाल्न आवश्यक पर्छ।

2. विशेष किवर्ड खोजी

कुनै स्ट्रिङ्गभित्र विशेष किवर्ड खोजी गरी, त्यसको अगाडि-पछाडि जानकारी प्राप्त गर्नु खोज कार्य र डेटा निष्कर्षणका लागि अनिवार्य छ।

3. प्रोग्रामको सुरक्षा सुधार

strncpy जस्ता कार्यहरूलाई उपयुक्त रूपमा प्रयोग गरेर, बफर ओभरफ्लो(बफर आकारभन्दा बढी डेटा लेख्ने)लाई रोक्न सकिन्छ। यो सुरक्षा जोखिमबाट बच्न महत्त्वपूर्ण छ।

लेखको संरचना

यस लेखमा, तलको क्रमअनुसार व्याख्या गर्नेछौं।

  1. C भाषामा स्ट्रिङ्ग भनेको के हो? मूलभूत अवधारणा र समाप्ति वर्णको महत्त्व
  2. C भाषा मा उपस्ट्रिङ् निकाल्ने तरिका【मानक पुस्तकालय संस्करण】
  3. C भाषा मा उपस्ट्रिंग निकाल्ने तरिका【स्वनिर्मित फङ्सन संस्करण】
  4. अक्षरकोड अनुसार स्ट्रिङ्ग कट गर्ने तरिका
  5. C भाषामा स्ट्रिङ्ग विभाजन गर्ने तरिका
  6. अनुप्रयोग उदाहरण: विशिष्ट अक्षरको अगाडि र पछाडि निकाल्ने तरिका
  7. सारांश
  8. FAQ

अब, पहिलो चरणमा 「C भाषा को स्ट्रिङ्ग के हो? मूल अवधारणा र अन्त्य क्यारेक्टरको महत्त्व」 बारे विस्तृत रूपमा हेरौं।

2. C Gengo को स्ट्रिङ के हो? मूल अवधारणा र अन्त्य अक्षरको महत्व

2.1 C Gengo को स्ट्रिङको मूल अवधारणा

स्ट्रिङ “char को एरे”

C Gengo मा, स्ट्रिङलाई अक्षरको एरे(char प्रकारको एरे) को रूपमा ह्यान्डल गरिन्छ। उदाहरणका लागि, तलको कोड स्ट्रिङको परिभाषा र प्रदर्शनको मूल उदाहरण हो।

#include <stdio.h>

int main() {
    char str[] = "Hello, World!"; // Define a string literal as an array
    printf("%s ", str); // Output the string
    return 0;
}

यस कोडमा, "Hello, World!" स्ट्रिङलाई char प्रकारको एरेको रूपमा संग्रह गरिन्छ, र printf("%s\n", str); द्वारा आउटपुट गरिन्छ।

स्ट्रिङको आन्तरिक संरचना

स्ट्रिङ "Hello" मेमोरीमा तलको जस्तै संग्रहित हुन्छ।

इन्डेक्स012345
पाठHello\0

C Gengo मा, स्ट्रिङको अन्त्य देखाउने विशेष अक्षर(नल अक्षर '\0')अन्त्यमा स्वचालित रूपमा थपिन्छ त्यसैले स्ट्रिङको लम्बाइ “वास्तविक अक्षर संख्या + 1” हुन्छ।

2.2 अन्त्य अक्षर(नल अक्षर '

नल अक्षर के हो?

'
)को महत्व

नल अक्षर नहुनुका समस्या

नल अक्षर('\0')ले स्ट्रिङको अन्त्य देखाउने विशेष अक्षर हो। C Gengo को स्ट्रिङलाई सही रूपमा ह्यान्डल गर्न, यो नल अक्षरको अस्तित्व बुझ्न आवश्यक छ।

#include <stdio.h>

int main() {
    char str[6] = {'H', 'e', 'l', 'l', 'o', '\0'}; // Explicitly specify the null terminator
    printf("%s ", str);                            // Display correctly
    return 0;
}

उपरोक्त कोडमा, '\0' नहुनुमा "Hello" को अन्त्य पहिचान हुँदैन, र अनपेक्षित व्यवहार उत्पन्न हुन सक्छ

2.3 स्ट्रिङको सही परिभाषा विधि

तलको जस्तै, अन्त्य अक्षर बिर्सिएमा, मेमोरीको असामान्य व्यवहार उत्पन्न हुन सक्छ।

#include <stdio.h>

int main() {
    char str[5] = {'H', 'e', 'l', 'l', 'o'}; // Does not include the null terminator
    printf("%s ", str);                      // May cause unexpected behavior
    return 0;
}

त्रुटिको कारण

  • printf("%s\n", str); नल क्यारेक्टर '\0' पत्ता लगाउनेसम्म क्यारेक्टरहरू निरन्तर आउटपुट गर्दछ
  • यदि छैन भने, मेमोरीमा रहेको अन्य डेटा आउटपुट हुन सक्छ।

विधि① स्ट्रिङ लिटरल प्रयोग गर्ने

विधि② स्पष्ट रूपमा एरे परिभाषित गर्ने

सबैभन्दा सामान्य स्ट्रिङ परिभाषा विधि स्ट्रिङ लिटरल प्रयोग गर्नु हो।

char str[] = "Hello";

यस विधिमा, C कम्पाइलरले स्वचालित रूपमा नल अक्षर '\0' थप्दछ, त्यसैले विशेष प्रक्रिया आवश्यक छैन।

2.4 स्ट्रिङको आकार जाँच्ने विधि

यदि म्यानुअली '\0' समावेश गरेर परिभाषित गर्ने हो भने, तलको जस्तै लेख्नुहोस्।

char str[6] = {'H', 'e', 'l', 'l', 'o', '\0'};
  • अक्षर संख्या को आकार निर्दिष्ट गर्नुहोस्, र अन्त्यमा राख्नु महत्त्वपूर्ण छ。
  • यदि मा राख्न नबिर्सनु भयो भने, अनपेक्षित व्यवहार हुन्छ।

strlen को कार्य

स्ट्रिङको लम्बाइ (अक्षर संख्या) प्राप्त गर्न, strlen फङ्क्शन प्रयोग गर्नुहोस्।

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

int main() {
    char str[] = "Hello";
    printf("Length of the string: %lu\n", strlen(str)); // Outputs 5 (does not include the null terminator)
    return 0;
}

2.5 सारांश

  • strlenनल क्यारेक्टर '\0' देखिनु अघि को क्यारेक्टरको संख्या गनिन्छ
  • sizeof(str)

3. C Gengo मा भागीय स्ट्रिङ निकाल्ने तरिका【Hyōjun Raiburari संस्करण】

  1. C भाषा को स्ट्रिङहरू char सरणी द्वारा व्यक्त गरिन्छ
  2. समाप्ति वर्ण (नल वर्ण '\0') स्ट्रिङको अन्त्य जनाउनको लागि हो, त्यसैले यो अनिवार्य रूपमा समावेश गर्नुपर्छ
  3. स्ट्रिङ्गको लम्बाइ प्राप्त गर्न strlen प्रयोग गर्नुहोस्
  4. उपयुक्त तरिकाले स्ट्रिङ्ग परिभाषित नगरेमा अनपेक्षित त्रुटिहरू उत्पन्न हुन सक्ने सम्भावना हुन्छ।

3.1 strncpy प्रयोग गरेर भागीय स्ट्रिङ प्राप्ति

C Gengo मा भागीय स्ट्रिङ निकाल्नका लागि, Hyōjun Raiburari लाई उपयोग गर्ने तरिका छ। यस भागमा, strncpystrchr जस्ता Hyōjun Raiburari कार्यहरूलाई प्रयोग गरेर, स्ट्रिङलाई भागीय रूपमा प्राप्त गर्ने तरिका लाई व्याख्या गरिन्छ।

strncpy को मूल संरचना

strncpy भनेको स्ट्रिङको एक भागलाई अर्को बफरमा प्रतिलिपि गर्ने कार्य हो।

मूल प्रयोग उदाहरण

char *strncpy(char *dest, const char *src, size_t n);
  • dest
  • src
  • n'\0'

strncpy को ध्यान दिनुपर्ने बुँदाहरू

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

int main() {
    char src[] = "Hello, World!";
    char dest[6];  // Buffer to store the substring

    strncpy(dest, src, 5); // Copy the first 5 characters "Hello"
    dest[5] = '\0';        // Manually add the null terminator

    printf("Substring: %s\n", dest);  // Output "Hello"

    return 0;
}

3.2 strncpy_s प्रयोग गरेर सुरक्षित स्ट्रिङ प्रतिलिपि

  1. नल क्यारेक्टर '\0' को हस्तचालित रूपमा थप्न आवश्यक छ अधिकतम अक्षरहरू प्रतिलिपि गर्दछ, तर का कारण, स्पष्ट रूपमा थप्न आवश्यक छ।
  2. बफर ओभरफ्लोमा ध्यान दिनुहोस् को आकार भन्दा ठूलो भएमा, बफरलाई ओभरफ्लो गरेर लेख्ने सम्भावना हुन्छ।

strncpy_s को मूल संरचना

strncpy_s भनेको strncpy को सुरक्षा बढाएको संस्करण हो, जसले बफर ओभरफ्लो रोक्न सक्छ।

प्रयोग उदाहरण

errno_t strncpy_s(char *dest, rsize_t destsz, const char *src, rsize_t n);
  • dest
  • destszdest
  • src
  • n

strncpy_s को फाइदाहरू

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

int main() {
    char src[] = "Hello, World!";
    char dest[6];

    if (strncpy_s(dest, sizeof(dest), src, 5) == 0) {
        dest[5] = '\0';  // Add null terminator just in case
        printf("Substring: %s\n", dest);
    } else {
        printf("Copy error\n");
    }

    return 0;
}

3.3 strchr प्रयोग गरेर निश्चित अक्षरसम्मको निकाल्ने प्रक्रिया

  • बफर आकार () निर्दिष्ट गर्न, सुरक्षित रूपमा प्रतिलिपि गर्न सकिन्छ।
  • destszn

तर, strncpy_s C11 मानकमा थपिएको कारण, केही वातावरणहरूमा प्रयोग गर्न नसक्ने सम्भावना छ, त्यसमा ध्यान दिनु आवश्यक छ।

strchr को मूल संरचना

strchr प्रयोग गर्दा, निश्चित अक्षरको स्थान पत्ता लगाउन सकिन्छ, र त्यस भागसम्मको स्ट्रिङ प्राप्त गर्न सकिन्छ।

प्रयोग उदाहरण

char *strchr(const char *str, int c);
  • str
  • cchar

बुँदा

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

int main() {
    char str[] = "Hello, World!";
    char *pos = strchr(str, ','); // Find the position of ','

    if (pos != NULL) {
        int length = pos - str; // Calculate the number of characters up to ','
        char result[20];

        strncpy(result, str, length);
        result[length] = '\0'; // Add the null terminator

        printf("Substring: %s\n", result);  // Output "Hello"
    }

    return 0;
}

3.4 strstr प्रयोग गरेर कुञ्जीशब्द खोजी र निकाल्ने प्रक्रिया

  • strchrले पहिलो पटक भेटिएको c को ठेगाना फर्काउँछ
  • pos - strstrncpy

strstr को मूल संरचना

strstr भागीय स्ट्रिङ खोज्न र त्यसपछि आउने स्ट्रिङ प्राप्त गर्न उपयोगी छ।

प्रयोग उदाहरण

char *strstr(const char *haystack, const char *needle);
  • haystack
  • needle

बुँदा

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

int main() {
    char str[] = "Hello, World!";
    char *pos = strstr(str, "World"); // Search for the position of "World"

    if (pos != NULL) {
        printf("Found substring: %s\n", pos);
    } else {
        printf("Substring not found.\n");
    }

    return 0;
}

3.5 सारांश

  • strstrneedle
  • NULLneedlehaystack

4. C gengo मा भाग स्ट्रिङ निकाल्ने तरिका【आफ्नै कार्य‑फङ्क्शन संस्करण】

  1. strncpy यसलाई प्रयोग गर्दा, उपस्ट्रिङहरूलाई सुरक्षित रूपमा प्रतिलिपि गर्न सकिन्छ, तर नल क्यारेक्टरलाई म्यानुअल रूपमा थप्न आवश्यक हुन्छ।
  2. strncpy_s ले destsz निर्दिष्ट गर्न सक्छ, सुरक्षा सुधार हुन्छ।
  3. strchr उपयोग गर्दा, विशिष्ट अक्षरसम्मको उपस्ट्रिङ प्राप्त गर्न सकिन्छ।
  4. strstr प्रयोग गर्दा, विशिष्ट कुञ्जीशब्दको स्थान प्राप्त गर्न सकिन्छ, र त्यस स्थानबाट अघिल्लो भाग काट्न सकिन्छ।

Hyōjun Raiburari लाई उपयोग गरेर, C Gengo मा स्ट्रिङ प्रक्रिया सरल र सुरक्षित रूपमा कार्यान्वयन गर्न सकिन्छ।

4.1 आफ्नै कार्य‑फङ्क्शन बनाउने फाइदा

मानक लाइब्रेरी प्रयोग गर्दा, आधारभूत भाग स्ट्रिङ निकाल्न सम्भव हुन्छ, तर केही अवस्थामाअझ लचिलो तरिकाआवश्यक हुन सक्छ। त्यसैले, यस भागमाआफ्नै कार्य‑फङ्क्शन प्रयोग गरेर भाग स्ट्रिङ निकाल्नेबारे व्याख्या गर्नेछौं।

4.2 आधारभूत भाग स्ट्रिङ निकाल्ने फङ्क्शन

मानक लाइब्रेरी प्रयोग गर्दा, भाग स्ट्रिङको प्रतिलिपि वा खोज गर्न सकिन्छ, तर तलका जस्ता समस्या छन्।

  • strncpy स्वचालित रूपमा नल क्यारेक्टर '\0' थप्दैन
  • strchrstrstr केवल आंशिक खोज मात्र गर्न सक्छन्
  • अझ लचिलो स्ट्रिङ् हेरफेर गर्न गाह्रो छ

त्यसैले, विशेष प्रयोग अनुसार अनुकूलन गर्न सकिनेआफ्नै कार्य‑फङ्क्शन बनाउने प्रभावकारी हुन्छ।

फङ्क्शनको विशिष्टता

पहिले, निर्दिष्ट स्थानबाट स्ट्रिङ निकाल्ने आधारभूत फङ्क्शन बनाउँछौं।

कार्यान्वयन कोड

  • पैरामीटर
  • const char *source
  • int start
  • int length
  • char *dest
  • प्रक्रिया सामग्री
  • startlengthdest
  • '\0'

बिन्दुहरू

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

void substring(const char *source, int start, int length, char *dest) {
    int i;
    for (i = 0; i < length && source[start + i] != '\0'; i++) {
        dest[i] = source[start + i];
    }
    dest[i] = '\0'; // Add null terminator
}

int main() {
    char text[] = "Hello, World!";
    char result[10];

    substring(text, 7, 5, result); // Extract "World"
    printf("Substring: %s\n", result);

    return 0;
}

4.3 malloc प्रयोग गरेर गतिशील भाग स्ट्रिङ प्राप्ति

  • forlength
  • '\0'
  • dest[i] = '\0'; सधैं नल क्यारेक्टर अन्त्यमा राख्नुहोस्

फङ्क्शनको विशिष्टता

उपरोक्त फङ्क्शनमा, dest को आकार पूर्वनिर्धारित रूपमा सुरक्षित गर्न आवश्यक छ। तर, आवश्यक आकारलाई गतिशील रूपमा सुरक्षित गर्न सकिएमा, फङ्क्शन अझ सामान्य बनिन्छ।

कार्यान्वयन कोड

  • आवश्यक मेमोरीलाई द्वारा सुरक्षित गर्नुहोस्
  • startlength
  • कॉल गर्ने पक्षमा गर्न आवश्यक छ

बिन्दुहरू

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

char *substring_dynamic(const char *source, int start, int length) {
    char *dest = (char *)malloc(length + 1); // +1 for the null terminator
    if (dest == NULL) {
        return NULL; // Memory allocation failed
    }

    int i;
    for (i = 0; i < length && source[start + i] != '\0'; i++) {
        dest[i] = source[start + i];
    }
    dest[i] = '\0';

    return dest;
}

int main() {
    char text[] = "Hello, World!";
    char *result = substring_dynamic(text, 7, 5);

    if (result != NULL) {
        printf("Substring: %s\n", result);
        free(result); // Free allocated memory
    } else {
        printf("Memory allocation failed.\n");
    }

    return 0;
}

4.4 मल्टिबाइट क्यारेक्टर(जापानी)समर्थन

  • mallocडायनामिक रूपमा मेमोरी सुरक्षित
  • प्रयोग पछि मा मेमोरी फ्री गर्न आवश्यक छ।

मल्टिबाइट क्यारेक्टरलाई विचार गरी कार्यान्वयन

जापानी(UTF-8 जस्ता मल्टिबाइट क्यारेक्टर)सँग काम गर्दा, 1 क्यारेक्टर 1 बाइटमा सीमित नहुन सक्छ कारण, साधारण substring फङ्क्शनले सही रूपमा काम गर्दैन।

कार्यान्वयन कोड(UTF-8 समर्थन)

  • mbstowcswchar_t
  • wcsncpy
  • wcstombs

बिन्दुहरू

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

void substring_utf8(const char *source, int start, int length, char *dest) {
    setlocale(LC_ALL, ""); // Set the locale

    wchar_t wsource[256];
    mbstowcs(wsource, source, 256); // Convert UTF-8 string to wide-character string

    wchar_t wresult[256];
    wcsncpy(wresult, wsource + start, length); // Extract substring in wide characters
    wresult[length] = L'\0';

    wcstombs(dest, wresult, 256); // Convert back to multibyte string
}

int main() {
    char text[] = "こんにちは、世界!"; // UTF-8 string
    char result[20];

    substring_utf8(text, 5, 3, result); // Extract "世界"
    printf("Substring: %s\n", result);

    return 0;
}

4.5 सारांश

  • setlocale(LC_ALL, "");
  • mbstowcs
  • wcsncpywcstombs

5. अक्षर कोड अनुसार स्ट्रिंग काट्ने विधि

  1. उपस्ट्रिंग यदि आफैँ बनाउनुहुन्छ भने, लचिलो रूपमा उपस्ट्रिंग प्राप्त गर्न सक्नुहुन्छ।
  2. डायनामिक मेमोरी अलोकेशन (malloc) प्रयोग गर्दा, परिवर्तनशील आकारको उपस्ट्रिंग प्राप्त गर्न सकिन्छ।
  3. मल्टिबाइट अक्षर(जापानी)लाई ह्यान्डल गर्दा、mbstowcs / wcstombs लाई उपयोग गर्नुहोस्。

मानक लाइब्रेरीको strncpy वा strchr ले समाधान गर्न कठिन अवस्थामा, आफ्नै कार्य‑फङ्क्शन बनाउँदा, C gengoको स्ट्रिङ प्रोसेसिंगलाई अझ शक्तिशाली बनाउन सकिन्छ।

5.1 ASCII(1 बाइट अक्षर) को अवस्थामा

C Gengo मा, अक्षर कोडको भिन्नतामा ध्यान नदिएमा, स्ट्रिंग काट्ने प्रक्रिया सही रूपमा काम नगर्न सक्छ। विशेष गरी, Nihongo जस्ता Maruchibaito moji(UTF-8、Shift_JIS、EUC-JP आदि)को साथ काम गर्दा, 1 अक्षर=1 बाइट हुँदैन, त्यसैले साधारण strncpy वा substring फलनहरूले उपयुक्त रूपमा प्रक्रिया गर्न सक्दैन।

यस भागमा, अक्षर कोड अनुसार स्ट्रिंग काट्ने विधि बारे विस्तृत रूपमा व्याख्या गर्नेछौं।

मूलभूत भाग स्ट्रिंग प्राप्ति

कार्यान्वयन उदाहरण

ASCII अक्षरहरू 1 अक्षर = 1 बाइट हुन्छ, त्यसैले strncpy वा substring फलनहरूद्वारा सजिलै प्रक्रिया गर्न सकिन्छ।

5.2 UTF-8(Maruchibaito moji) को अवस्थामा

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

void substring_ascii(const char *source, int start, int length, char *dest) {
    strncpy(dest, source + start, length);
    dest[length] = '\0'; // Add null terminator
}

int main() {
    char text[] = "Hello, World!";
    char result[6];

    substring_ascii(text, 7, 5, result); // Extract "World"
    printf("Substring: %s\n", result);

    return 0;
}

बिन्दु

  • ASCII वर्ण (अंक‑अक्षर मात्र) भएको अवस्थामा strncpy पर्याप्त रूपमा समर्थित छ
  • '\0'(नल क्यारेक्टर)लाई सधैँ थप्नुहोस्

UTF-8 को विशेषता

सही प्रक्रिया विधि

UTF-8 मा, 1 अक्षरको बाइट संख्या 1-4 बाइट परिवर्तनशील हुन्छ, त्यसैले साधारण strncpy प्रयोग गर्दा अक्षरको मध्यमा काटिने सम्भावना हुन्छ।

UTF-8 अनुकूल भाग स्ट्रिंग प्राप्ति

C Gengo मा, UTF-8 लाई सुरक्षित रूपमा प्रक्रिया गर्न, mbstowcs प्रयोग गरेर वाइड स्ट्रिंग(wchar_t)मा रूपान्तरण गरी, भाग स्ट्रिंग प्राप्त गर्ने विधि सिफारिस गरिन्छ।

5.3 Shift_JIS(Maruchibaito moji) को अवस्थामा

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

void substring_utf8(const char *source, int start, int length, char *dest) {
    setlocale(LC_ALL, ""); // Set the locale

    wchar_t wsource[256];
    mbstowcs(wsource, source, 256); // Convert multibyte string to wide-character string

    wchar_t wresult[256];
    wcsncpy(wresult, wsource + start, length); // Get the substring
    wresult[length] = L'\0';

    wcstombs(dest, wresult, 256); // Convert wide-character string back to multibyte
}

int main() {
    char text[] = "こんにちは、世界!"; // UTF-8 string
    char result[20];

    substring_utf8(text, 5, 3, result); // Extract "世界"
    printf("Substring: %s\n", result);

    return 0;
}

बिन्दु

  • setlocale(LC_ALL, "");
  • mbstowcswchar_twcsncpy
  • wcstombs

Shift_JIS को विशेषता

Shift_JIS अनुकूल भाग स्ट्रिंग प्राप्ति

Shift_JIS मा, 1 अक्षर 1 बाइट वा 2 बाइट हुने कारणले, साधारण strncpy ले अक्षर बिग्रिन सक्छ।

Shift_JIS मा कार्यान्वयन

Shift_JIS को अवस्थामा पनि वाइड स्ट्रिंगमा रूपान्तरण गरेर प्रक्रिया गर्ने विधि सिफारिस गरिन्छ।

5.4 EUC-JP(Maruchibaito moji) को अवस्थामा

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

void substring_sjis(const char *source, int start, int length, char *dest) {
    setlocale(LC_ALL, "Japanese"); // Set locale to handle Shift_JIS

    wchar_t wsource[256];
    mbstowcs(wsource, source, 256); // Convert multibyte string (Shift_JIS) to wide-character string

    wchar_t wresult[256];
    wcsncpy(wresult, wsource + start, length); // Extract substring
    wresult[length] = L'\0';

    wcstombs(dest, wresult, 256); // Convert wide-character string back to multibyte (Shift_JIS)
}

int main() {
    char text[] = "こんにちは、世界!"; // Shift_JIS string (depending on environment)
    char result[20];

    substring_sjis(text, 5, 3, result); // Extract "世界"
    printf("Substring: %s\n", result);

    return 0;
}

बिन्दु

  • Shift_JIS लाई सही रूपमा प्रशोधन गर्न सेट गर्नुहोस्。
  • mbstowcswcstombs

EUC-JP को विशेषता

EUC-JP अनुकूल भाग स्ट्रिंग प्राप्ति

EUC-JP पनि Shift_JIS जस्तै, 1 अक्षरको बाइट संख्या फरक हुने कारणले, वाइड अक्षर प्रयोग गरेर रूपान्तरण प्रक्रिया आवश्यक हुन्छ बनिन्छ।

5.5 सारांश

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

void substring_eucjp(const char *source, int start, int length, char *dest) {
    setlocale(LC_ALL, "ja_JP.eucJP"); // Set locale to handle EUC-JP

    wchar_t wsource[256];
    mbstowcs(wsource, source, 256); // Convert multibyte string (EUC-JP) to wide-character string

    wchar_t wresult[256];
    wcsncpy(wresult, wsource + start, length); // Extract substring
    wresult[length] = L'\0';

    wcstombs(dest, wresult, 256); // Convert wide-character string back to multibyte (EUC-JP)
}

int main() {
    char text[] = "こんにちは、世界!"; // EUC-JP string (depending on environment)
    char result[20];

    substring_eucjp(text, 5, 3, result); // Extract "世界"
    printf("Substring: %s\n", result);

    return 0;
}

बिन्दु

  • setlocale(LC_ALL, "ja_JP.eucJP");
  • mbstowcswcstombs

6. C Gengo मा स्ट्रिङलाई विभाजन गर्ने तरिका

अक्षर एन्कोडिङबाइट संख्यासिफारिस गरिएको प्रक्रिया
ASCII1 बाइटstrncpy
UTF-81-4 बाइटmbstowcswcstombs
Shift_JIS1 वा 2 बाइटmbstowcswcstombs
EUC-JP1 वा 2 बाइटmbstowcswcstombs
  • यदि केवल ASCII वर्णहरू मात्र strncpy ठीक छ
  • UTF-8, Shift_JIS, EUC-JP को अवस्थामा mbstowcs / wcstombs प्रयोग गर्नुहोस्
  • परिस्थितिको आधारमा setlocale(LC_ALL, \"...\"); उपयुक्त रूपमा सेट गर्नुहोस्

6.1 strtok प्रयोग गरेर स्ट्रिङ विभाजन

स्ट्रिङलाई विभाजन गर्ने प्रक्रिया, CSV डेटा विश्लेषण, कमाण्ड लाइन आर्ग्युमेन्ट प्रोसेसिंग, लग डेटा विश्लेषण आदि धेरै परिस्थितिहरूमा आवश्यक पर्छ। C Gengo मा, strtokstrtok_r जस्ता मानक लाइब्रेरी फङ्क्शनहरू प्रयोग गर्ने तरिका वा आफ्नै फङ्क्शन बनाउने तरिका छन्।

यस सेक्सनमा, स्ट्रिङलाई निश्चित विभाजक क्यारेक्टरले विभाजन गर्ने तरिका बारे विस्तृत व्याख्या गरिनेछ।

मूल संरचना

strtok भनेको, निर्दिष्ट विभाजक क्यारेक्टर (डेलिमिटर) द्वारा स्ट्रिङलाई विभाजन गर्ने फङ्क्शन हो।

उदाहरण प्रयोग: कम्मा , द्वारा स्ट्रिङलाई विभाजन

char *strtok(char *str, const char *delim);
  • str
  • delim
  • रिटर्न मान
  • ध्यान दिनु पर्ने बुँदाहरूstrtok'\0'

चलाउने परिणाम

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


int main() {
    char str[] = "apple,banana,orange,grape"; // String to be split
    char *token = strtok(str, ",");            // Get the first token

    while (token != NULL) {
        printf("Token: %s\n", token);
        token = strtok(NULL, ",");             // Get the next token
    }

    return 0;
}

strtok को ध्यान दिनुपर्ने बुँदाहरू

token: apple
token: banana
token: orange
token: grape

6.2 strtok_r प्रयोग गरेर थ्रेड-सेफ स्ट्रिङ विभाजन

  1. मूल स्ट्रिङ परिवर्तन गर्नुहोस्
  • strtok विभाजक अक्षरलाई '\0' मा परिवर्तन गर्दा,
  1. थ्रेड‑सेफ छैन
  • strtok आन्तरिक रूपमा ग्लोबल स्थिर भेरिएबलहरू प्रयोग गर्दछ

मूल संरचना

strtok_r भनेको, strtok को थ्रेड-सेफ संस्करण हो, जसले स्थिति लाई saveptr मा सुरक्षित गर्छ, त्यसैले मल्टिथ्रेड वातावरणमा पनि सुरक्षित रूपमा प्रयोग गर्न सकिन्छ।

उदाहरण प्रयोग: स्पेस द्वारा स्ट्रिङलाई विभाजन

char *strtok_r(char *str, const char *delim, char **saveptr);
  • str
  • delim
  • saveptr

strtok_r को फाइदाहरू

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

int main() {
    char str[] = "Hello World from C"; // String to be split
    char *token;
    char *saveptr; // Pointer to store internal state

    token = strtok_r(str, " ", &saveptr); // Get the first token
    while (token != NULL) {
        printf("Token: %s\n", token);
        token = strtok_r(NULL, " ", &saveptr); // Get the next token
    }

    return 0;
}

6.3 आफ्नै फङ्क्शनले स्ट्रिङलाई विभाजन गर्ने ( strtok प्रयोग नगर्ने तरिका )

  • スレッドセーフ
  • एकाधिक स्ट्रिङहरू समांतर रूपमा प्रक्रिया गर्न सकिन्छ

आफ्नै फङ्क्शनको विशिष्टता

strtok मूल स्ट्रिङलाई परिवर्तन गर्छ, त्यसैले परिवर्तन नगरी स्ट्रिङलाई विभाजन गर्ने आफ्नै फङ्क्शन बनाउने सम्भव छ।

कार्यान्वयन कोड

  • इनपुट
  • const char *source
  • const char delim
  • char tokens[][50]
  • प्रक्रिया
  • source
  • delimtokens

चलाउने परिणाम

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

void split_string(const char *source, char delim, char tokens[][50], int *count) {
    int i = 0, j = 0, token_index = 0;

    while (source[i] != '\0') {
        if (source[i] == delim) {
            tokens[token_index][j] = '\0';
            token_index++;
            j = 0;
        } else {
            tokens[token_index][j] = source[i];
            j++;
        }
        i++;
    }
    tokens[token_index][j] = '\0';
    *count = token_index + 1;
}

int main() {
    char text[] = "dog,cat,bird,fish";
    char tokens[10][50]; // Can store up to 10 words
    int count;

    split_string(text, ',', tokens, &count);

    for (int i = 0; i < count; i++) {
        printf("Token: %s\n", tokens[i]);
    }

    return 0;
}

मुख्य बुँदा

Token: dog
Token: cat
Token: bird
Token: fish

6.4 स्ट्रिङ विभाजनको प्रयोग (CSV डेटा प्रोसेसिंग)

  • source
  • tokens

CSV डेटा विश्लेषणको उदाहरण

CSV (कम्मा विभाजित) डेटा लाई strtok प्रयोग गरेर विश्लेषण गर्न सकिन्छ।

चलाउने परिणाम

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

int main() {
    char csv[] = "Alice,24,Female\nBob,30,Male\nCharlie,28,Male"; // CSV data
    char *line = strtok(csv, "\n"); // Process line by line

    while (line != NULL) {
        char *name = strtok(line, ",");
        char *age = strtok(NULL, ",");
        char *gender = strtok(NULL, ",");

        printf("Name: %s, Age: %s, Gender: %s\n", name, age, gender);

        line = strtok(NULL, "\n");
    }

    return 0;
}

6.5 सारांश

Name: Alice, Age: 24, Gender: Female
Name: Bob, Age: 30, Gender: Male
Name: Charlie, Age: 28, Gender: Male

निष्कर्ष

पद्धतिफाइदाहरूनुकसान
strtokसहजै विभाजन गर्न सकिन्छमूल स्ट्रिङ परिवर्तन गर्नुहोस्
strtok_rथ्रेड‑सुरक्षितउपयोग केही जटिल छ
स्वनिर्मित फंक्शनमूल स्ट्रिङलाई परिवर्तन नगर्नुहोस्कोड लामो हुन्छ
CSV विश्लेषणडेटा प्रशोधनको लागि उपयोगीstrtok को सीमाहरूमा ध्यान दिनुहोस्

7. अनुप्रयोग उदाहरण: विशेष अक्षरको अगाडि र पछाडि निकाल्ने विधि

  • यदि यो साधारण विभाजन हो भने strtok
  • मल्टिथ्रेडिङ् भएमा strtok_r
  • मूल परिवर्तन गर्न चाहनुहुन्न भने, आफैँको कार्य प्रयोग गर्नुहोस्
  • CSV डेटा विश्लेषणमा पनि प्रयोग गर्न सकिन्छ

अगामी सेक्सनमा, “प्रयोग उदाहरण: निश्चित क्यारेक्टरको अगाडि र पछाडि निकाल्ने तरिका” बारे विस्तृत व्याख्या गरिनेछ।

7.1 strchr प्रयोग गरेर विशेष अक्षरको अगाडि स्ट्रिङ प्राप्त गर्नु

स्ट्रिङ प्रोसेसिङमा, विशेष अक्षर वा कुञ्जीशब्दको अगाडि र पछाडि निकाल्ने अपरेसन आवश्यक पर्नु सामान्य हो। उदाहरणका लागि, तलका केसहरू विचार गर्न सकिन्छ।

  • URL बाट डोमेन भाग मात्र प्राप्त गर्नुहोस्
  • फाइल पथबाट फाइल नाम निकाल्नुहोस्
  • विशिष्ट ट्याग वा चिन्हको अगाडि र पछाडि रहेको स्ट्रिङ प्राप्त गर्नुहोस्

C भाषामा, strchrstrstr प्रयोग गरेर, यस्ता प्रोसेसहरू कार्यान्वयन गर्न सकिन्छ। साथै, अधिक लचिलो प्रोसेस आवश्यक परेमा, आफ्नै फङ्क्शन बनाउने विधि पनि प्रभावकारी हुन्छ।

मूल संरचना

strchr प्रयोग गर्दा, विशेष अक्षर (पहिलो भेटिएको) को स्थान पहिचान गर्न सकिन्छ।

उदाहरण: फाइल पाथबाट फाइल नाम प्राप्त गर्नु

char *strchr(const char *str, int c);
  • str
  • cchar

strchr ले c फेला परेमा, त्यसको ठेगाना फिर्ता गर्छ।

कार्य परिणाम

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

void get_filename(const char *path, char *filename) {
    char *pos = strrchr(path, '/'); // Search for the last '/'

    if (pos != NULL) {
        strcpy(filename, pos + 1); // Copy from the character after '/'
    } else {
        strcpy(filename, path); // If no '/', copy the whole path
    }
}

int main() {
    char path[] = "/home/user/documents/report.txt";
    char filename[50];

    get_filename(path, filename);
    printf("Filename: %s\n", filename);

    return 0;
}

मुख्य बुँदा

Filename: report.txt

7.2 strstr प्रयोग गरेर विशेष कुञ्जीशब्दको पछिको स्ट्रिङ प्राप्त गर्नु

  • strrchr अन्तिम पटक प्रकट भएको विशिष्ट अक्षर (/) को स्थान प्राप्त
  • pos + 1फाइल नाम

मूल संरचना

strstr प्रयोग गर्दा、विशेष स्ट्रिङ (कुञ्जीशब्द) खोजी गरी, त्यसको स्थानबाट पछिको स्ट्रिङ प्राप्त गर्न सकिन्छ।

उदाहरण: URL बाट डोमेन प्राप्त गर्नु

char *strstr(const char *haystack, const char *needle);
  • घाँसको ढोका
  • needle

strstr ले needle फेला परेमा, त्यसको स्थानको ठेगाना फिर्ता गर्छ।

कार्य परिणाम

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

void get_domain(const char *url, char *domain) {
    char *pos = strstr(url, "://"); // Search for the position of "://"

    if (pos != NULL) {
        strcpy(domain, pos + 3); // Copy from the character after "://"
    } else {
        strcpy(domain, url); // If "://" is not found, copy the entire string
    }
}

int main() {
    char url[] = "https://www.example.com/page.html";
    char domain[50];

    get_domain(url, domain);
    printf("Domain part: %s\n", domain);

    return 0;
}

मुख्य बुँदा

Domain part: www.example.com/page.html

7.3 strchr प्रयोग गरेर विशेष अक्षरको अगाडि र पछाडि भाग विभाजन गर्नु

  • strstr"https://""http://""//"
  • pos + 3://

उदाहरण: इमेल ठेगानाबाट प्रयोगकर्ता नाम र डोमेन अलग गर्नु

strchr प्रयोग गरेर, विशेष अक्षरको अगाडि र पछाडि स्ट्रिङ विभाजन गरी प्राप्त गर्न सकिन्छ।

कार्य परिणाम

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

void split_email(const char *email, char *username, char *domain) {
    char *pos = strchr(email, '@'); // Search for the position of '@'

    if (pos != NULL) {
        strncpy(username, email, pos - email); // Copy the part before '@'
        username[pos - email] = '\0';          // Add null terminator
        strcpy(domain, pos + 1);               // Copy the part after '@'
    }
}

int main() {
    char email[] = "user@example.com";
    char username[50], domain[50];

    split_email(email, username, domain);
    printf("Username: %s\n", username);
    printf("Domain: %s\n", domain);

    return 0;
}

मुख्य बुँदा

Username: user
Domain: example.com

7.4 अनुप्रयोग: HTML ट्यागभित्रको विशेष गुण निकाल्नु

  • strchr'@'
  • strncpy'@' को अगाडि रहेको भागलाई प्रतिलिपि गरेर नल क्यारेक्टर थप्नुहोस्
  • strcpy'@' को पछिको भागलाई प्रतिलिपि गर्नुहोस्

उदाहरण: <a href="URL"> बाट URL प्राप्त गर्नु

HTML ट्यागभित्रबाट विशेष गुण प्राप्त गर्दा पनि, strstr प्रयोग गर्न सकिन्छ।

कार्य परिणाम

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

void get_href(const char *html, char *url) {
    char *start = strstr(html, "href=\""); // Search for the position of href="
    if (start != NULL) {
        start += 6; // Move past href="
        char *end = strchr(start, '"'); // Search for the next "
        if (end != NULL) {
            strncpy(url, start, end - start);
            url[end - start] = '\0'; // Add null terminator
        }
    }
}

int main() {
    char html[] = "<a href=\"https://example.com\">Click Here</a>";
    char url[100];

    get_href(html, url);
    printf("Extracted URL: %s\n", url);

    return 0;
}

मुख्य बुँदा

抽出されたURL: https://example.com

7.5 सारांश

  • strstr"href=\""
  • strchr"

निष्कर्ष

प्रक्रिया सामग्रीउपयोग गर्ने फङ्सनफाइदाहरू
विशिष्ट अक्षरको अगाडि प्राप्त गर्नुहोस्strchr / strrchrसाधारण र छिटो
विशिष्ट अक्षर पछि प्राप्त गर्नुहोस्strstrकुंजीशब्द खोज सम्भव छ
विशिष्ट अक्षरको आधारमा अगाडि र पछाडि विभाजन गर्नुहोस्strchr + strncpyउपयोगकर्ता नाम / डोमेन विभाजन आदि को लागि उपयोगी
HTML ट्यागको गुणहरू प्राप्त गर्नेstrstr + strchrवेब स्क्रैपिङमा लागू गर्न सकिन्छ

8. सारांश

  • strchrstrstr को उपयोग गर्दा, विशिष्ट अक्षर/कीवर्डको अगाडि र पछाडि सजिलै प्राप्त गर्न सकिन्छ
  • फाइल पथको प्रशोधन, URL को विश्लेषण, इमेल ठेगानाको विभाजन आदि, धेरै परिस्थितिहरूमा उपयोगी हुन्छन्
  • वेब स्क्रैपिङ जस्तै उन्नत प्रक्रियाहरूमा पनि लागू गर्न सकिन्छ

8.1 लेखको पुनरावलोकन

यस लेखमा、C Gengo मा स्ट्रिंग काट्ने विधि बारेमा, आधारभूतदेखि उन्नतसम्म विस्तृत रूपमा व्याख्या गरिएको छ। यहाँ, प्रत्येक खण्डका महत्वपूर्ण बुँदाहरूलाई पुनरावलोकन गरी, प्रयोग अनुसार उत्तम विधिहरूलाई व्यवस्थित गर्दछौं।

8.2 प्रयोग अनुसार उत्तम विधि

विभागसामग्रीमहत्त्वपूर्ण बिन्दुहरू
C भाषा स्ट्रिङ्गको आधारभूतC भाषामा स्ट्रिङहरू एरेको रूपमा व्यवहार गरिन्छ, समाप्ति अक्षर महत्त्वपूर्ण छस्ट्रिङ् ह्यान्डल गर्दा
मानक पुस्तकालय प्रयोग गरेर कटौतीstrncpystrchrstrncpy नल टर्मिनेटर म्यानुअली थप्न
स्वनिर्मित फंक्शनद्वारा कटौतीलचिलो फङ्सन बनाउनुहोस्mallocपरिवर्तनीय लम्बाइको उपस्ट्रिङ प्राप्त गर्न सकिन्छ
क्यारेक्टर कोड अनुसार प्रक्रियाUTF-8, Shift_JIS, EUC-JP को सामना गर्ने तरिकाmbstowcswcstombsवाइड क्यारेक्टरमा परिवर्तन गर्नु सुरक्षित छ
स्ट्रिङ विभाजन गर्ने विधिstrtokstrtok_rstrtok मूल स्ट्रिङलाई परिवर्तन गर्दछ
विशिष्ट अक्षरको अगाडि र पछाडि निकाल्नुहोस्strchrstrstrफाइल नाम प्राप्ति, URL विश्लेषण, HTML विश्लेषण

1. भाग स्ट्रिंगको निकाल्ने

2. स्ट्रिंगको विभाजन

प्रयोग गर्ने स्थानसर्वोत्तम विधि
म निश्चित लम्बाइको स्ट्रिङ प्राप्त गर्न चाहन्छुstrncpy or substring()
म सुरक्षित कट गर्न चाहन्छुstrncpy_s
मल्टिबाइट क्यारेक्टरहरू (UTF-8, Shift_JIS, EUC-JP) को प्रबन्धनmbstowcs / wcstombs

3. विशेष अक्षरको अगाडि र पछाडि प्राप्त गर्ने

प्रयोग गर्ने परिस्थितिसर्वोत्तम विधि
साधारण रूपमा स्ट्रिङलाई टुक्र्याउन चाहन्छुstrtok
म थ्रेड‑सेफ विभाजन गर्न चाहन्छुstrtok_r
म मूल स्ट्रिङलाई परिवर्तन नगरी विभाजन गर्न चाहन्छुस्वनिर्मित फङ्सन(split_string()

8.3 C Gengo को स्ट्रिंग प्रोसेसिंगका ध्यान दिनुपर्ने बुँदाहरू

प्रयोग गर्ने परिस्थितिसर्वोत्तम विधि
फाइल पथबाट फाइल नाम प्राप्त गर्नुहोस्strrchr(path, '/')
URL बाट डोमेन भाग प्राप्त गर्नुहोस्strstr(url, "://")
ईमेल ठेगानाबाट प्रयोगकर्ता नाम र डोमेन अलग गर्नुहोस्strchr(email, '@')
HTML ट्यागबाट गुणधर्म मानहरू प्राप्त गर्नुहोस्strstr(tag, "href=\"") + strchr(tag, '"')

1. नल टर्मिनेटर '
सुरक्षित स्ट्रिंग कपीको उदाहरण
'
को व्यवस्थापनलाई पूर्ण रूपमा गर्नु

2. बफर ओभरफ्लोमा ध्यान दिनु

C Gengo को स्ट्रिंग प्रोसेसिंगमा, टर्मिनेटर क्यारेक्टर '\0' लाई उचित रूपमा व्यवस्थापन गर्नु सबैभन्दा महत्वपूर्ण हो। विशेष गरी strncpystrchr प्रयोग गर्दा, नल क्यारेक्टरलाई म्यानुअली थप्न ध्यान दिनुहोस्।

3. मल्टिबाइट क्यारेक्टरको प्रोसेसिंगमा mbstowcs प्रयोग गर्नु

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

int main() {
    char src[] = "Hello, World!";
    char dest[6];

    strncpy(dest, src, 5);
    dest[5] = '\0'; // Add null terminator for safety

    printf("Substring: %s\n", dest);

    return 0;
}

4. बफर साइजको व्यवस्थापन

C Gengo को स्ट्रिंग अपरेसनमा, एरेको सीमा बाहिर पहुँच नदिन सावधानीपूर्वक कार्यान्वयन गर्न आवश्यक छ। विशेष गरी, strncpy प्रयोग गर्दा कपी गर्ने बाइट संख्यालाई नियन्त्रण गर्नु महत्वपूर्ण छ।

सुरक्षित स्ट्रिंग कपीको उदाहरण

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

int main() {
    char src[] = "Hello, World!";
    char dest[6];

    strncpy(dest, src, sizeof(dest) - 1);
    dest[5] = '\0'; // Explicitly add null terminator

    printf("Substring: %s\n", dest);
    return 0;
}

8.4 थप अध्ययनतर्फ

UTF-8 वा Shift_JIS जस्ता मल्टिबाइट क्यारेक्टरहरूलाई ह्यान्डल गर्दा, साधारणतया strncpy वा strlen सही रूपमा काम गर्दैन।

त्यसैले, मल्टिबाइट क्यारेक्टरहरूलाई ह्यान्डल गर्दा, एक पटक mbstowcs द्वारा वाइड स्ट्रिंगमा रूपान्तरण गरी, उचित रूपमा प्रोसेस गर्नु सिफारिस गरिन्छ।

#include <stdio.h>
#include <wchar.h>
#include <locale.h>

int main() {
    setlocale(LC_ALL, ""); // Set the locale

    char text[] = "こんにちは、世界!"; // UTF-8
    wchar_t wtext[256];

    mbstowcs(wtext, text, 256); // Convert to wide-character string

    printf("Converted wide-character string: %ls\n", wtext);

    return 0;
}

अध्ययनलाई गहिरो बनाउने विषयहरू

स्ट्रिंग प्रोसेसिंगमा, आवश्यक मेमोरी साइज लाई पूर्वमा गणना गरी, बफरको ओभरफ्लो रोक्नु महत्वपूर्ण छ। विशेष गरी, malloc प्रयोग गरी डायनामिक मेमोरी सुरक्षित गर्दा, त्यसको साइजलाई ठीकसँग बुझ्नुपर्छ।

8.5 सारांश

C Gengo को स्ट्रिंग प्रोसेसिंग, प्रोग्रामको सुरक्षा र पठनीयता सुधार्ने महत्वपूर्ण कौशल हो। यस लेखमा प्रस्तुत सामग्रीलाई आधार बनाएर, तलका विषयहरू पनि अध्ययन गर्दा, अझ उन्नत स्ट्रिंग प्रोसेसिंग सम्भव हुन्छ।

अध्ययनलाई गहिरो बनाउने विषयहरू

  1. नियमित अभिव्यक्ति (regex)
  2. फाइल सञ्चालन(fgets, fscanf प्रयोग गरेर स्ट्रिङ प्रोसेसिङ)
  3. मेमोरी व्यवस्थापन (malloc, realloc प्रयोग गरेर गतिशील स्ट्रिङ प्रक्रिया)
  4. डेटा विश्लेषण (JSON, XML को विश्लेषण विधि)

8.5 सारांश

  1. C भाषा को स्ट्रिङहरू char ऐरेद्वारा व्यवस्थापन गरिन्छ, त्यसैले अन्त्य वर्ण '\0' को ह्यान्डलिङ महत्वपूर्ण छ
  2. उपस्ट्रिंग निकाल्न strncpy, substring(), malloc प्रयोग गरिन्छ
  3. स्ट्रिङ्ग विभाजनको लागि strtok / strtok_r / स्वनिर्मित फङ्सनको उपयोग
  4. विशिष्ट अक्षरको अगाडि र पछाडि प्राप्त गर्ने अवस्थामा strchr, strstr प्रयोग गर्नुहोस्
  5. मल्टिबाइट क्यारेक्टरहरू (जापानी) ह्यान्डल गर्दा, mbstowcs प्रयोग गर्नुहोस्
  6. सुरक्षित स्ट्रिङ् प्रोसेसिङ्गमा ध्यान दिनुहोस्, बफर ओभरफ्लोमा सावधान रहनुहोस्

यस लेखको सामग्रीलाई उपयोग गरेमा, C Gengo मा व्यावहारिक स्ट्रिंग प्रोसेसिंग सम्भव हुन्छ। आधारभूत फङ्सनहरूलाई बुझेर, आफ्नै फङ्सनहरू र उन्नत प्रोसेसिंगमा चुनौती दिनु, र अझ प्रभावकारी कोड लेख्न सक्नुहोस्!