- 1 1. परिचय
- 2 2. C Gengo को स्ट्रिङ के हो? मूल अवधारणा र अन्त्य अक्षरको महत्व
- 3 3. C Gengo मा भागीय स्ट्रिङ निकाल्ने तरिका【Hyōjun Raiburari संस्करण】
- 4 4. C gengo मा भाग स्ट्रिङ निकाल्ने तरिका【आफ्नै कार्य‑फङ्क्शन संस्करण】
- 5 5. अक्षर कोड अनुसार स्ट्रिंग काट्ने विधि
- 6 6. C Gengo मा स्ट्रिङलाई विभाजन गर्ने तरिका
- 7 7. अनुप्रयोग उदाहरण: विशेष अक्षरको अगाडि र पछाडि निकाल्ने विधि
- 8 8. सारांश
1. परिचय
C भाषा मा स्ट्रिङ्गको सञ्चालन प्रोग्रामिङ सिक्ने क्रममा महत्वपूर्ण कौशल मध्ये एक हो। विशेष गरी, स्ट्रिङ्गको टुक्रा निकाल्ने(आंशिक स्ट्रिङ्गको निष्कर्षण)डेटा प्रशोधन र ढाँचा रूपान्तरण गर्दा प्रायः प्रयोग हुन्छ।
यस लेखमा, C भाषा मा स्ट्रिङ्ग टुक्रा निकाल्ने विधिहरू बारे, मानक पुस्तकालय कार्यहरू प्रयोग गर्ने तरिका, आफ्नै कार्य बनाउने तरिका, मल्टिबाइट क्यारेक्टर(जापानी)को समर्थन, स्ट्रिङ्ग विभाजन विधिहरू आदि विस्तृत रूपमा व्याख्या गर्नेछौं। साथै, अनुप्रयोग उदाहरणहरू र त्रुटि ह्यान्डलिङ्ग पनि प्रस्तुत गर्नेछौं, कृपया अन्त्यसम्म हेर्नुहोस्।
यस लेखमा सिक्न सकिने कुरा
यो लेख पढेर, तलका जस्ता कौशलहरू हासिल गर्न सक्नुहुन्छ।
- C भाषा को स्ट्रिङको आधारभूत अवधारणा र समाप्ति वर्ण को भूमिका
strncpy
strchr
मानक पुस्तकालय फङ्सनहरू प्रयोग गरेर उपस्ट्रिङ निकाल्ने प्रक्रिया- स्वनिर्मित फङ्क्शन
- मल्टिबाइट क्यारेक्टर (जापानी) लाई ध्यानमा राख्दै
strtok
स्ट्रिङ्ग विभाजन गर्ने तरिका- विशिष्ट अक्षरको अगाडि र पछाडि प्राप्त गर्ने तरिका
शुरु गर्नेहरूका लागि पनि बुझ्न सजिलो बनाउने गरी, कोड उदाहरणहरू समेटेर व्याख्या गर्नेछौं।
किन C भाषा मा स्ट्रिङ्ग टुक्रा निकाल्ने महत्त्वपूर्ण छ?
C भाषा स्ट्रिङ्गलाई स्ट्रिङ्गलाई「एरे(char प्रकारको एरे)」को रूपमा व्यवहार गर्ने कारण, अन्य उच्च-स्तरीय भाषाहरू (Python वा JavaScript आदि) जस्तै सजिलै आंशिक स्ट्रिङ्ग प्राप्त गर्न सकिँदैन। त्यसैले, तलका जस्ता परिस्थितिहरूमा उपयुक्त विधि चयन गर्नु महत्त्वपूर्ण हुन्छ।
1. इनपुट डेटा प्रशोधन
उदाहरणका लागि, लग डेटा वा CSV फाइल जस्ता डेटा विश्लेषण गर्दा, विशेष आइटम निकाल्न आवश्यक पर्छ।
2. विशेष किवर्ड खोजी
कुनै स्ट्रिङ्गभित्र विशेष किवर्ड खोजी गरी, त्यसको अगाडि-पछाडि जानकारी प्राप्त गर्नु खोज कार्य र डेटा निष्कर्षणका लागि अनिवार्य छ।
3. प्रोग्रामको सुरक्षा सुधार
strncpy
जस्ता कार्यहरूलाई उपयुक्त रूपमा प्रयोग गरेर, बफर ओभरफ्लो(बफर आकारभन्दा बढी डेटा लेख्ने)लाई रोक्न सकिन्छ। यो सुरक्षा जोखिमबाट बच्न महत्त्वपूर्ण छ।
लेखको संरचना
यस लेखमा, तलको क्रमअनुसार व्याख्या गर्नेछौं।
- C भाषामा स्ट्रिङ्ग भनेको के हो? मूलभूत अवधारणा र समाप्ति वर्णको महत्त्व
- C भाषा मा उपस्ट्रिङ् निकाल्ने तरिका【मानक पुस्तकालय संस्करण】
- C भाषा मा उपस्ट्रिंग निकाल्ने तरिका【स्वनिर्मित फङ्सन संस्करण】
- अक्षरकोड अनुसार स्ट्रिङ्ग कट गर्ने तरिका
- C भाषामा स्ट्रिङ्ग विभाजन गर्ने तरिका
- अनुप्रयोग उदाहरण: विशिष्ट अक्षरको अगाडि र पछाडि निकाल्ने तरिका
- सारांश
- 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"
मेमोरीमा तलको जस्तै संग्रहित हुन्छ।
इन्डेक्स | 0 | 1 | 2 | 3 | 4 | 5 |
---|---|---|---|---|---|---|
पाठ | H | e | l | l | o | \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 संस्करण】
- C भाषा को स्ट्रिङहरू
char
सरणी द्वारा व्यक्त गरिन्छ - समाप्ति वर्ण (नल वर्ण
'\0'
) स्ट्रिङको अन्त्य जनाउनको लागि हो, त्यसैले यो अनिवार्य रूपमा समावेश गर्नुपर्छ - स्ट्रिङ्गको लम्बाइ प्राप्त गर्न
strlen
प्रयोग गर्नुहोस् - उपयुक्त तरिकाले स्ट्रिङ्ग परिभाषित नगरेमा अनपेक्षित त्रुटिहरू उत्पन्न हुन सक्ने सम्भावना हुन्छ।
3.1 strncpy
प्रयोग गरेर भागीय स्ट्रिङ प्राप्ति
C Gengo मा भागीय स्ट्रिङ निकाल्नका लागि, Hyōjun Raiburari लाई उपयोग गर्ने तरिका छ। यस भागमा, strncpy
र strchr
जस्ता 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
प्रयोग गरेर सुरक्षित स्ट्रिङ प्रतिलिपि
- नल क्यारेक्टर
'\0'
को हस्तचालित रूपमा थप्न आवश्यक छ अधिकतम अक्षरहरू प्रतिलिपि गर्दछ, तर का कारण, स्पष्ट रूपमा थप्न आवश्यक छ। - बफर ओभरफ्लोमा ध्यान दिनुहोस् को आकार भन्दा ठूलो भएमा, बफरलाई ओभरफ्लो गरेर लेख्ने सम्भावना हुन्छ।
strncpy_s
को मूल संरचना
strncpy_s
भनेको strncpy
को सुरक्षा बढाएको संस्करण हो, जसले बफर ओभरफ्लो रोक्न सक्छ।
प्रयोग उदाहरण
errno_t strncpy_s(char *dest, rsize_t destsz, const char *src, rsize_t n);
dest
destsz
dest
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
प्रयोग गरेर निश्चित अक्षरसम्मको निकाल्ने प्रक्रिया
- बफर आकार () निर्दिष्ट गर्न, सुरक्षित रूपमा प्रतिलिपि गर्न सकिन्छ।
destsz
n
तर, strncpy_s
C11 मानकमा थपिएको कारण, केही वातावरणहरूमा प्रयोग गर्न नसक्ने सम्भावना छ, त्यसमा ध्यान दिनु आवश्यक छ।
strchr
को मूल संरचना
strchr
प्रयोग गर्दा, निश्चित अक्षरको स्थान पत्ता लगाउन सकिन्छ, र त्यस भागसम्मको स्ट्रिङ प्राप्त गर्न सकिन्छ।
प्रयोग उदाहरण
char *strchr(const char *str, int c);
str
c
char
बुँदा
#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 - str
strncpy
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 सारांश
strstr
needle
NULL
needle
haystack
4. C gengo मा भाग स्ट्रिङ निकाल्ने तरिका【आफ्नै कार्य‑फङ्क्शन संस्करण】
strncpy
यसलाई प्रयोग गर्दा, उपस्ट्रिङहरूलाई सुरक्षित रूपमा प्रतिलिपि गर्न सकिन्छ, तर नल क्यारेक्टरलाई म्यानुअल रूपमा थप्न आवश्यक हुन्छ।strncpy_s
लेdestsz
निर्दिष्ट गर्न सक्छ, सुरक्षा सुधार हुन्छ।strchr
उपयोग गर्दा, विशिष्ट अक्षरसम्मको उपस्ट्रिङ प्राप्त गर्न सकिन्छ।strstr
प्रयोग गर्दा, विशिष्ट कुञ्जीशब्दको स्थान प्राप्त गर्न सकिन्छ, र त्यस स्थानबाट अघिल्लो भाग काट्न सकिन्छ।
Hyōjun Raiburari लाई उपयोग गरेर, C Gengo मा स्ट्रिङ प्रक्रिया सरल र सुरक्षित रूपमा कार्यान्वयन गर्न सकिन्छ।
4.1 आफ्नै कार्य‑फङ्क्शन बनाउने फाइदा
मानक लाइब्रेरी प्रयोग गर्दा, आधारभूत भाग स्ट्रिङ निकाल्न सम्भव हुन्छ, तर केही अवस्थामाअझ लचिलो तरिकाआवश्यक हुन सक्छ। त्यसैले, यस भागमाआफ्नै कार्य‑फङ्क्शन प्रयोग गरेर भाग स्ट्रिङ निकाल्नेबारे व्याख्या गर्नेछौं।
4.2 आधारभूत भाग स्ट्रिङ निकाल्ने फङ्क्शन
मानक लाइब्रेरी प्रयोग गर्दा, भाग स्ट्रिङको प्रतिलिपि वा खोज गर्न सकिन्छ, तर तलका जस्ता समस्या छन्।
strncpy
स्वचालित रूपमा नल क्यारेक्टर'\0'
थप्दैनstrchr
रstrstr
केवल आंशिक खोज मात्र गर्न सक्छन्- अझ लचिलो स्ट्रिङ् हेरफेर गर्न गाह्रो छ
त्यसैले, विशेष प्रयोग अनुसार अनुकूलन गर्न सकिनेआफ्नै कार्य‑फङ्क्शन बनाउने प्रभावकारी हुन्छ।
फङ्क्शनको विशिष्टता
पहिले, निर्दिष्ट स्थानबाट स्ट्रिङ निकाल्ने आधारभूत फङ्क्शन बनाउँछौं।
कार्यान्वयन कोड
- पैरामीटर
const char *source
int start
int length
char *dest
- प्रक्रिया सामग्री
start
length
dest
'\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
प्रयोग गरेर गतिशील भाग स्ट्रिङ प्राप्ति
for
length
'\0'
dest[i] = '\0';
सधैं नल क्यारेक्टर अन्त्यमा राख्नुहोस्
फङ्क्शनको विशिष्टता
उपरोक्त फङ्क्शनमा, dest
को आकार पूर्वनिर्धारित रूपमा सुरक्षित गर्न आवश्यक छ। तर, आवश्यक आकारलाई गतिशील रूपमा सुरक्षित गर्न सकिएमा, फङ्क्शन अझ सामान्य बनिन्छ।
कार्यान्वयन कोड
- आवश्यक मेमोरीलाई द्वारा सुरक्षित गर्नुहोस्
start
length
- कॉल गर्ने पक्षमा गर्न आवश्यक छ
बिन्दुहरू
#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 समर्थन)
mbstowcs
wchar_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
wcsncpy
wcstombs
5. अक्षर कोड अनुसार स्ट्रिंग काट्ने विधि
उपस्ट्रिंग
यदि आफैँ बनाउनुहुन्छ भने, लचिलो रूपमा उपस्ट्रिंग प्राप्त गर्न सक्नुहुन्छ।- डायनामिक मेमोरी अलोकेशन (
malloc
) प्रयोग गर्दा, परिवर्तनशील आकारको उपस्ट्रिंग प्राप्त गर्न सकिन्छ। - मल्टिबाइट अक्षर(जापानी)लाई ह्यान्डल गर्दा、
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, "");
mbstowcs
wchar_t
wcsncpy
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 लाई सही रूपमा प्रशोधन गर्न सेट गर्नुहोस्。
mbstowcs
wcstombs
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");
mbstowcs
wcstombs
6. C Gengo मा स्ट्रिङलाई विभाजन गर्ने तरिका
अक्षर एन्कोडिङ | बाइट संख्या | सिफारिस गरिएको प्रक्रिया |
---|---|---|
ASCII | 1 बाइट | strncpy |
UTF-8 | 1-4 बाइट | mbstowcs wcstombs |
Shift_JIS | 1 वा 2 बाइट | mbstowcs wcstombs |
EUC-JP | 1 वा 2 बाइट | mbstowcs wcstombs |
- यदि केवल ASCII वर्णहरू मात्र
strncpy
ठीक छ - UTF-8, Shift_JIS, EUC-JP को अवस्थामा
mbstowcs
/wcstombs
प्रयोग गर्नुहोस् - परिस्थितिको आधारमा
setlocale(LC_ALL, \"...\");
उपयुक्त रूपमा सेट गर्नुहोस्
6.1 strtok
प्रयोग गरेर स्ट्रिङ विभाजन
स्ट्रिङलाई विभाजन गर्ने प्रक्रिया, CSV डेटा विश्लेषण, कमाण्ड लाइन आर्ग्युमेन्ट प्रोसेसिंग, लग डेटा विश्लेषण आदि धेरै परिस्थितिहरूमा आवश्यक पर्छ। C Gengo मा, strtok
र strtok_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
प्रयोग गरेर थ्रेड-सेफ स्ट्रिङ विभाजन
- मूल स्ट्रिङ परिवर्तन गर्नुहोस्
strtok
विभाजक अक्षरलाई'\0'
मा परिवर्तन गर्दा,
- थ्रेड‑सेफ छैन
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
delim
tokens
चलाउने परिणाम
#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 भाषामा, strchr
र strstr
प्रयोग गरेर, यस्ता प्रोसेसहरू कार्यान्वयन गर्न सकिन्छ। साथै, अधिक लचिलो प्रोसेस आवश्यक परेमा, आफ्नै फङ्क्शन बनाउने विधि पनि प्रभावकारी हुन्छ।
मूल संरचना
strchr
प्रयोग गर्दा, विशेष अक्षर (पहिलो भेटिएको) को स्थान पहिचान गर्न सकिन्छ।
उदाहरण: फाइल पाथबाट फाइल नाम प्राप्त गर्नु
char *strchr(const char *str, int c);
str
c
char
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. सारांश
strchr
रstrstr
को उपयोग गर्दा, विशिष्ट अक्षर/कीवर्डको अगाडि र पछाडि सजिलै प्राप्त गर्न सकिन्छ- फाइल पथको प्रशोधन, URL को विश्लेषण, इमेल ठेगानाको विभाजन आदि, धेरै परिस्थितिहरूमा उपयोगी हुन्छन्
- वेब स्क्रैपिङ जस्तै उन्नत प्रक्रियाहरूमा पनि लागू गर्न सकिन्छ
8.1 लेखको पुनरावलोकन
यस लेखमा、C Gengo मा स्ट्रिंग काट्ने विधि बारेमा, आधारभूतदेखि उन्नतसम्म विस्तृत रूपमा व्याख्या गरिएको छ। यहाँ, प्रत्येक खण्डका महत्वपूर्ण बुँदाहरूलाई पुनरावलोकन गरी, प्रयोग अनुसार उत्तम विधिहरूलाई व्यवस्थित गर्दछौं।
8.2 प्रयोग अनुसार उत्तम विधि
विभाग | सामग्री | महत्त्वपूर्ण बिन्दुहरू |
---|---|---|
C भाषा स्ट्रिङ्गको आधारभूत | C भाषामा स्ट्रिङहरू एरेको रूपमा व्यवहार गरिन्छ, समाप्ति अक्षर महत्त्वपूर्ण छ | स्ट्रिङ् ह्यान्डल गर्दा |
मानक पुस्तकालय प्रयोग गरेर कटौती | strncpy strchr | strncpy नल टर्मिनेटर म्यानुअली थप्न |
स्वनिर्मित फंक्शनद्वारा कटौती | लचिलो फङ्सन बनाउनुहोस् | malloc परिवर्तनीय लम्बाइको उपस्ट्रिङ प्राप्त गर्न सकिन्छ |
क्यारेक्टर कोड अनुसार प्रक्रिया | UTF-8, Shift_JIS, EUC-JP को सामना गर्ने तरिका | mbstowcs wcstombs वाइड क्यारेक्टरमा परिवर्तन गर्नु सुरक्षित छ |
स्ट्रिङ विभाजन गर्ने विधि | strtok strtok_r | strtok मूल स्ट्रिङलाई परिवर्तन गर्दछ |
विशिष्ट अक्षरको अगाडि र पछाडि निकाल्नुहोस् | strchr strstr | फाइल नाम प्राप्ति, 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'
लाई उचित रूपमा व्यवस्थापन गर्नु सबैभन्दा महत्वपूर्ण हो। विशेष गरी strncpy
र strchr
प्रयोग गर्दा, नल क्यारेक्टरलाई म्यानुअली थप्न ध्यान दिनुहोस्।
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 को स्ट्रिंग प्रोसेसिंग, प्रोग्रामको सुरक्षा र पठनीयता सुधार्ने महत्वपूर्ण कौशल हो। यस लेखमा प्रस्तुत सामग्रीलाई आधार बनाएर, तलका विषयहरू पनि अध्ययन गर्दा, अझ उन्नत स्ट्रिंग प्रोसेसिंग सम्भव हुन्छ।
अध्ययनलाई गहिरो बनाउने विषयहरू
- नियमित अभिव्यक्ति (regex)
- फाइल सञ्चालन(fgets, fscanf प्रयोग गरेर स्ट्रिङ प्रोसेसिङ)
- मेमोरी व्यवस्थापन (malloc, realloc प्रयोग गरेर गतिशील स्ट्रिङ प्रक्रिया)
- डेटा विश्लेषण (JSON, XML को विश्लेषण विधि)
8.5 सारांश
- C भाषा को स्ट्रिङहरू
char
ऐरेद्वारा व्यवस्थापन गरिन्छ, त्यसैले अन्त्य वर्ण'\0'
को ह्यान्डलिङ महत्वपूर्ण छ - उपस्ट्रिंग निकाल्न
strncpy
,substring()
,malloc
प्रयोग गरिन्छ - स्ट्रिङ्ग विभाजनको लागि
strtok
/strtok_r
/ स्वनिर्मित फङ्सनको उपयोग - विशिष्ट अक्षरको अगाडि र पछाडि प्राप्त गर्ने अवस्थामा
strchr
,strstr
प्रयोग गर्नुहोस् - मल्टिबाइट क्यारेक्टरहरू (जापानी) ह्यान्डल गर्दा,
mbstowcs
प्रयोग गर्नुहोस् - सुरक्षित स्ट्रिङ् प्रोसेसिङ्गमा ध्यान दिनुहोस्, बफर ओभरफ्लोमा सावधान रहनुहोस्
यस लेखको सामग्रीलाई उपयोग गरेमा, C Gengo मा व्यावहारिक स्ट्रिंग प्रोसेसिंग सम्भव हुन्छ। आधारभूत फङ्सनहरूलाई बुझेर, आफ्नै फङ्सनहरू र उन्नत प्रोसेसिंगमा चुनौती दिनु, र अझ प्रभावकारी कोड लेख्न सक्नुहोस्!