अरुडिनो - स्ट्रिंग्स
पाठ को संग्रहीत करने के लिए स्ट्रिंग्स का उपयोग किया जाता है। उनका उपयोग एलसीडी पर या Arduino IDE सीरियल मॉनिटर विंडो में टेक्स्ट प्रदर्शित करने के लिए किया जा सकता है। उपयोगकर्ता इनपुट को संग्रहीत करने के लिए स्ट्रिंग्स भी उपयोगी हैं। उदाहरण के लिए, वर्ण जो उपयोगकर्ता Arduino से जुड़े कीपैड पर टाइप करते हैं।
Arduino प्रोग्रामिंग में दो प्रकार के तार हैं -
- वर्णों की सारणियाँ, जो C प्रोग्रामिंग में प्रयुक्त स्ट्रिंग्स के समान हैं।
- Arduino स्ट्रिंग, जो हमें स्केच में एक स्ट्रिंग ऑब्जेक्ट का उपयोग करने देता है।
इस अध्याय में, हम स्ट्रिंग्स, वस्तुओं और अरुडिनो स्केच में स्ट्रिंग्स के उपयोग को सीखेंगे। अध्याय के अंत तक, आप सीखेंगे कि स्केच में किस प्रकार के स्ट्रिंग का उपयोग करना है।
स्ट्रिंग चरित्र
पहली प्रकार की स्ट्रिंग जो हम सीखेंगे वह स्ट्रिंग है जो कि प्रकार के पात्रों की एक श्रृंखला है char। पिछले अध्याय में, हमने सीखा कि एक सरणी क्या है; मेमोरी में संग्रहीत एक ही प्रकार के चर की एक निरंतर श्रृंखला। एक स्ट्रिंग चार चर का एक सरणी है।
एक स्ट्रिंग एक विशेष सरणी है जिसमें स्ट्रिंग के अंत में एक अतिरिक्त तत्व होता है, जिसमें हमेशा 0 (शून्य) का मान होता है। इसे "नल समाप्त स्ट्रिंग" के रूप में जाना जाता है।
स्ट्रिंग चरित्र सरणी उदाहरण
यह उदाहरण दिखाएगा कि कैसे एक स्ट्रिंग बनाने के लिए और इसे सीरियल मॉनिटर विंडो पर प्रिंट करें।
Example
void setup() {
char my_str[6]; // an array big enough for a 5 character string
Serial.begin(9600);
my_str[0] = 'H'; // the string consists of 5 characters
my_str[1] = 'e';
my_str[2] = 'l';
my_str[3] = 'l';
my_str[4] = 'o';
my_str[5] = 0; // 6th array element is a null terminator
Serial.println(my_str);
}
void loop() {
}
निम्नलिखित उदाहरण से पता चलता है कि स्ट्रिंग किस चीज से बनी है; मुद्रण योग्य वर्णों के साथ एक वर्ण सरणी और सरणी के अंतिम तत्व के रूप में 0 यह दिखाने के लिए कि यह वह जगह है जहाँ स्ट्रिंग समाप्त होती है। स्ट्रिंग को Arduino IDE Serial Monitor विंडो का उपयोग करके प्रिंट किया जा सकता हैSerial.println() और स्ट्रिंग का नाम गुजर रहा है।
यह एक ही उदाहरण एक और अधिक सुविधाजनक तरीके से लिखा जा सकता है जैसा कि नीचे दिखाया गया है -
Example
void setup() {
char my_str[] = "Hello";
Serial.begin(9600);
Serial.println(my_str);
}
void loop() {
}
इस स्केच में, संकलक स्ट्रिंग सरणी के आकार की गणना करता है और शून्य के साथ स्वचालित रूप से स्ट्रिंग को समाप्त करता है। एक सरणी जो छह तत्वों की लंबी होती है और इसमें शून्य के बाद पांच वर्ण होते हैं, पिछले स्केच की तरह ही बनाई जाती है।
स्ट्रिंग एरर को मैनिप्युलेट करना
हम एक स्केच के भीतर एक स्ट्रिंग सरणी को बदल सकते हैं जैसा कि निम्नलिखित स्केच में दिखाया गया है।
उदाहरण
void setup() {
char like[] = "I like coffee and cake"; // create a string
Serial.begin(9600);
// (1) print the string
Serial.println(like);
// (2) delete part of the string
like[13] = 0;
Serial.println(like);
// (3) substitute a word into the string
like[13] = ' '; // replace the null terminator with a space
like[18] = 't'; // insert the new word
like[19] = 'e';
like[20] = 'a';
like[21] = 0; // terminate the string
Serial.println(like);
}
void loop() {
}
परिणाम
I like coffee and cake
I like coffee
I like coffee and tea
स्केच निम्नलिखित तरीके से काम करता है।
स्ट्रिंग बनाना और प्रिंट करना
ऊपर दिए गए स्केच में, एक नया स्ट्रिंग बनाया जाता है और फिर सीरियल मॉनिटर विंडो में प्रदर्शन के लिए मुद्रित किया जाता है।
स्ट्रिंग को छोटा करना
स्ट्रिंग में 14 वें चरित्र को शून्य शून्य (2) के साथ बदलकर स्ट्रिंग को छोटा किया जाता है। यह 0 से स्ट्रिंग की गिनती में तत्व संख्या 13 है।
जब स्ट्रिंग मुद्रित होती है, तो सभी वर्ण शून्य को समाप्त करने वाले नए नल तक मुद्रित होते हैं। अन्य वर्ण गायब नहीं होते हैं; वे अभी भी स्मृति में मौजूद हैं और स्ट्रिंग सरणी अभी भी उसी आकार की है। अंतर केवल इतना है कि स्ट्रिंग्स के साथ काम करने वाला कोई भी फ़ंक्शन केवल स्ट्रिंग को पहले अशक्त टर्मिनेटर तक देखेगा।
स्ट्रिंग में एक शब्द बदलना
अंत में, स्केच "केक" शब्द को "चाय" (3) से बदल देता है। इसे सबसे पहले अशक्त टर्मिनेटर को बदलना है जैसे कि [13] एक स्थान के साथ ताकि स्ट्रिंग मूल रूप से बनाए गए प्रारूप में बहाल हो।
नए पात्र "केक" शब्द के "केक" को "चाय" के साथ ओवरराइट करते हैं। यह व्यक्तिगत पात्रों को अधिलेखित करके किया जाता है। "केक" के 'ई' को एक नए नल समाप्ति चरित्र के साथ बदल दिया जाता है। इसका परिणाम यह है कि स्ट्रिंग को वास्तव में दो अशक्त वर्णों के साथ समाप्त किया जाता है, मूल एक स्ट्रिंग के अंत में और नया जो "ई" को "केक" में बदल देता है। जब नया स्ट्रिंग मुद्रित किया जाता है तो इससे कोई अंतर नहीं पड़ता है क्योंकि स्ट्रिंग को प्रिंट करने वाला फ़ंक्शन स्ट्रिंग वर्णों को प्रिंट करना बंद कर देता है जब यह पहली नल टर्मिनेटर का सामना करता है।
स्ट्रिंग एरर को मैनिपुलेट करने के लिए कार्य
पिछले स्केच ने स्ट्रिंग में अलग-अलग पात्रों को एक्सेस करके मैन्युअल तरीके से स्ट्रिंग में हेरफेर किया। स्ट्रिंग सरणियों में हेरफेर करना आसान बनाने के लिए, आप ऐसा करने के लिए अपने स्वयं के कार्य लिख सकते हैं, या इसमें से कुछ स्ट्रिंग फ़ंक्शन का उपयोग कर सकते हैंC भाषा पुस्तकालय।
क्र.सं. | कार्य और विवरण |
---|---|
1 | String() स्ट्रिंग 0000, संस्करण 0019 के रूप में कोर का हिस्सा, आपको वर्ण सरणियों की तुलना में अधिक जटिल तरीकों से पाठ के तारों का उपयोग और हेरफेर करने की अनुमति देता है। आप स्ट्रिंग्स को संक्षिप्त कर सकते हैं, उन्हें जोड़ सकते हैं, खोज कर सकते हैं और सबस्ट्रिंग को प्रतिस्थापित कर सकते हैं, और बहुत कुछ। यह एक साधारण चरित्र सरणी की तुलना में अधिक मेमोरी लेता है, लेकिन यह अधिक उपयोगी भी है। संदर्भ के लिए, वर्ण सरणियों को एक छोटे 'एस' के साथ तार के रूप में संदर्भित किया जाता है, और स्ट्रिंग वर्ग के उदाहरणों को एक पूंजी एस के साथ स्ट्रिंग्स के रूप में संदर्भित किया जाता है। ध्यान दें कि "डबल कोट्स" में निर्दिष्ट निरंतर तार को चार सरणियों के रूप में माना जाता है, स्ट्रिंग वर्ग के उदाहरण नहीं |
2 | charAt() स्ट्रिंग के किसी विशेष वर्ण तक पहुँचें। |
3 | compareTo() दो स्ट्रिंग्स की तुलना करता है, परीक्षण करता है कि क्या एक दूसरे से पहले या बाद में आता है, या क्या वे समान हैं। तार चरित्र के ASCII मूल्यों का उपयोग करके चरित्र द्वारा तुलना की जाती है। इसका मतलब है, उदाहरण के लिए, 'ए' 'बी' से पहले आता है लेकिन 'ए' के बाद। अक्षर से पहले नंबर आते हैं। |
4 | concat() पैरामीटर को स्ट्रिंग पर लागू करता है। |
5 | c_str() एक स्ट्रिंग की सामग्री को सी-स्टाइल, अशक्त-समाप्त स्ट्रिंग के रूप में परिवर्तित करता है। ध्यान दें कि यह आंतरिक स्ट्रिंग बफर को सीधे एक्सेस देता है और इसका उपयोग देखभाल के साथ किया जाना चाहिए। विशेष रूप से, आपको कभी भी दिए गए पॉइंटर के माध्यम से स्ट्रिंग को संशोधित नहीं करना चाहिए। जब आप स्ट्रिंग ऑब्जेक्ट को संशोधित करते हैं, या जब यह नष्ट हो जाता है, तो पहले से c_str () द्वारा लौटाया गया कोई भी सूचक अमान्य हो जाता है और इसे अब उपयोग नहीं किया जाना चाहिए। |
6 | endsWith() परीक्षण एक स्ट्रिंग के दूसरे स्ट्रिंग के पात्रों के साथ समाप्त होता है या नहीं। |
7 | equals() समानता के लिए दो तारों की तुलना करता है। तुलना केस-संवेदी है, जिसका अर्थ है स्ट्रिंग "हैलो" स्ट्रिंग "हेलो" के बराबर नहीं है। |
8 | equalsIgnoreCase() समानता के लिए दो तारों की तुलना करता है। तुलना मामले के प्रति संवेदनशील नहीं है, जिसका अर्थ है स्ट्रिंग ("हैलो") स्ट्रिंग ("हेलो") के बराबर है। |
9 | getBytes() आपूर्ति किए गए बफर को स्ट्रिंग के पात्रों की प्रतिलिपि बनाता है। |
10 | indexOf() एक चरित्र या दूसरे स्ट्रिंग के भीतर स्ट्रिंग का पता लगाता है। डिफ़ॉल्ट रूप से, यह स्ट्रिंग की शुरुआत से खोज करता है, लेकिन किसी दिए गए सूचकांक से भी शुरू हो सकता है, जिससे चरित्र या स्ट्रिंग के सभी उदाहरणों का पता लगाने की अनुमति मिलती है। |
1 1 | lastIndexOf() एक चरित्र या दूसरे स्ट्रिंग के भीतर स्ट्रिंग का पता लगाता है। डिफ़ॉल्ट रूप से, यह स्ट्रिंग के अंत से खोज करता है, लेकिन किसी दिए गए इंडेक्स से पीछे की ओर भी काम कर सकता है, जिससे चरित्र या स्ट्रिंग के सभी उदाहरणों का पता लगाने की अनुमति मिलती है। |
12 | length() स्ट्रिंग की लंबाई, वर्णों में देता है। (ध्यान दें कि इसमें अनुगामी अशक्त वर्ण शामिल नहीं है।) |
13 | remove() जगह में संशोधित करें, एक स्ट्रिंग को प्रदान किए गए इंडेक्स से स्ट्रिंग के अंत तक या प्रदान किए गए इंडेक्स से इंडेक्स प्लस काउंट तक चार्ट हटाने। |
14 | replace() स्ट्रिंग बदलें () फ़ंक्शन आपको किसी दिए गए वर्ण के सभी उदाहरणों को किसी अन्य वर्ण के साथ बदलने की अनुमति देता है। आप एक स्ट्रिंग के सबस्ट्रिंग को बदलने के लिए एक अलग प्रतिस्थापन के साथ प्रतिस्थापित का उपयोग भी कर सकते हैं। |
15 | reserve() स्ट्रिंग रिजर्व () फ़ंक्शन आपको स्ट्रिंग्स में हेरफेर करने के लिए मेमोरी में एक बफर आवंटित करने की अनुमति देता है। |
16 | setCharAt() स्ट्रिंग का एक चरित्र सेट करता है। स्ट्रिंग की मौजूदा लंबाई के बाहर सूचकांकों पर कोई प्रभाव नहीं है। |
17 | startsWith() परीक्षण एक स्ट्रिंग के दूसरे स्ट्रिंग के पात्रों के साथ शुरू होता है या नहीं। |
18 | toCharArray() आपूर्ति किए गए बफर को स्ट्रिंग के पात्रों की प्रतिलिपि बनाता है। |
19 | substring() स्ट्रिंग का एक विकल्प प्राप्त करें। शुरुआती इंडेक्स समावेशी है (संबंधित चरित्र को सब्स्ट्रिंग में शामिल किया गया है), लेकिन वैकल्पिक समाप्ति इंडेक्स अनन्य है (विकल्प में संबंधित वर्ण शामिल नहीं है)। यदि समाप्त इंडेक्स छोड़ दिया जाता है, तो स्ट्रिंग के अंत तक सबस्ट्रिंग जारी रहता है। |
20 | toInt() एक मान्य स्ट्रिंग को पूर्णांक में परिवर्तित करता है। इनपुट स्ट्रिंग एक पूर्णांक संख्या से शुरू होनी चाहिए। यदि स्ट्रिंग में गैर-पूर्णांक संख्याएं हैं, तो फ़ंक्शन रूपांतरण करना बंद कर देगा। |
21 | toFloat() एक मान्य स्ट्रिंग को एक फ़्लोट में परिवर्तित करता है। इनपुट स्ट्रिंग एक अंक से शुरू होनी चाहिए। यदि स्ट्रिंग में गैर-अंक वर्ण हैं, तो फ़ंक्शन रूपांतरण करना बंद कर देगा। उदाहरण के लिए, स्ट्रिंग्स "123.45", "123", और "123fish" क्रमशः 123.45, 123.00 और 123.00 में परिवर्तित हो जाते हैं। ध्यान दें कि "123.456" 123.46 के साथ अनुमानित है। यह भी ध्यान दें कि तैरने में सटीकता के केवल 6-7 दशमलव अंक होते हैं और इससे लंबे तार काटे जा सकते हैं। |
22 | toLowerCase() एक स्ट्रिंग का निचला-केस संस्करण प्राप्त करें। 1.0 के रूप में, toLowerCase () एक नए को वापस करने के बजाय जगह में स्ट्रिंग को संशोधित करता है। |
23 | toUpperCase() स्ट्रिंग का ऊपरी-केस संस्करण प्राप्त करें। 1.0 के रूप में, toUpperCase () एक नए को वापस करने के बजाय जगह में स्ट्रिंग को संशोधित करता है। |
24 | trim() निकाले गए किसी भी अग्रणी और अनुगामी व्हाट्सएप के साथ स्ट्रिंग का एक संस्करण प्राप्त करें। 1.0 के रूप में, ट्रिम () एक नया लौटने के बजाय स्ट्रिंग को संशोधित करता है। |
अगले स्केच में कुछ सी स्ट्रिंग फ़ंक्शन का उपयोग किया गया है।
उदाहरण
void setup() {
char str[] = "This is my string"; // create a string
char out_str[40]; // output from string functions placed here
int num; // general purpose integer
Serial.begin(9600);
// (1) print the string
Serial.println(str);
// (2) get the length of the string (excludes null terminator)
num = strlen(str);
Serial.print("String length is: ");
Serial.println(num);
// (3) get the length of the array (includes null terminator)
num = sizeof(str); // sizeof() is not a C string function
Serial.print("Size of the array: ");
Serial.println(num);
// (4) copy a string
strcpy(out_str, str);
Serial.println(out_str);
// (5) add a string to the end of a string (append)
strcat(out_str, " sketch.");
Serial.println(out_str);
num = strlen(out_str);
Serial.print("String length is: ");
Serial.println(num);
num = sizeof(out_str);
Serial.print("Size of the array out_str[]: ");
Serial.println(num);
}
void loop() {
}
परिणाम
This is my string
String length is: 17
Size of the array: 18
This is my string
This is my string sketch.
String length is: 25
Size of the array out_str[]: 40
स्केच निम्नलिखित तरीके से काम करता है।
स्ट्रिंग प्रिंट करें
नव निर्मित स्ट्रिंग सीरियल मॉनिटर विंडो में मुद्रित होता है जैसा कि पिछले स्केच में किया गया था।
स्ट्रिंग की लंबाई प्राप्त करें
स्ट्रिंग की लंबाई प्राप्त करने के लिए स्ट्रलेन () फ़ंक्शन का उपयोग किया जाता है। स्ट्रिंग की लंबाई केवल मुद्रण योग्य वर्णों के लिए है और इसमें शून्य टर्मिनेटर शामिल नहीं है।
स्ट्रिंग में 17 अक्षर हैं, इसलिए हम 17 को सीरियल मॉनीटर विंडो में प्रिंट करते हुए देखते हैं।
ऐरे की लंबाई प्राप्त करें
ऑपरेटर आकार () का उपयोग उस स्ट्रिंग की लंबाई प्राप्त करने के लिए किया जाता है जिसमें स्ट्रिंग शामिल है। लंबाई में शून्य टर्मिनेटर शामिल है, इसलिए लंबाई स्ट्रिंग की लंबाई से एक अधिक है।
sizeof () एक फ़ंक्शन की तरह दिखता है, लेकिन तकनीकी रूप से एक ऑपरेटर है। यह सी स्ट्रिंग लाइब्रेरी का हिस्सा नहीं है, लेकिन स्केच में इसका उपयोग सरणी के आकार और स्ट्रिंग के आकार (या स्ट्रिंग लंबाई) के बीच अंतर दिखाने के लिए किया गया था।
एक स्ट्रिंग की प्रतिलिपि बनाएँ
Strcpy () फ़ंक्शन का उपयोग str [] स्ट्रिंग को out_num [] सरणी में कॉपी करने के लिए किया जाता है। Strcpy () फ़ंक्शन की प्रतिलिपि दूसरी स्ट्रिंग को पहले स्ट्रिंग में दी गई है। स्ट्रिंग की एक प्रति अब out_num [] सरणी में मौजूद है, लेकिन केवल सरणी के 18 तत्वों को लेती है, इसलिए हमारे पास अभी भी सरणी में 22 मुक्त चार तत्व हैं। ये मुक्त तत्व स्मृति में स्ट्रिंग के बाद पाए जाते हैं।
स्ट्रिंग को सरणी में कॉपी किया गया था ताकि स्केच के अगले भाग में उपयोग करने के लिए हमारे पास सरणी में कुछ अतिरिक्त स्थान हो, जो स्ट्रिंग के अंत में एक स्ट्रिंग जोड़ रहा है।
स्ट्रिंग को एक स्ट्रिंग में जोड़ें (कॉनटेननेट)
स्केच एक स्ट्रिंग से दूसरे में जुड़ता है, जिसे कॉन्टेक्टेशन के रूप में जाना जाता है। यह स्ट्रैकट () फ़ंक्शन का उपयोग करके किया जाता है। Strcat () फ़ंक्शन इसके द्वारा पास किए गए पहले स्ट्रिंग के अंत में पास किए गए दूसरे स्ट्रिंग को डालता है।
संघनन के बाद, नई स्ट्रिंग की लंबाई दिखाने के लिए स्ट्रिंग की लंबाई मुद्रित की जाती है। सरणी की लंबाई तब यह दिखाने के लिए मुद्रित की जाती है कि हमारे पास 40-तत्व लंबे सरणी में 25-वर्ण लंबा स्ट्रिंग है।
याद रखें कि 25-वर्ण लंबा स्ट्रिंग वास्तव में शून्य समाप्त होने के कारण सरणी के 26 वर्णों को लेता है।
ऐरे की सीमा
स्ट्रिंग्स और सरणियों के साथ काम करते समय, स्ट्रिंग्स या सरणियों की सीमा के भीतर काम करना बहुत महत्वपूर्ण है। उदाहरण के स्केच में, एक सरणी बनाई गई थी, जो 40 वर्णों की लंबी थी, ताकि स्मृति को आवंटित करने के लिए उपयोग किया जा सके ताकि तार को हेरफेर किया जा सके।
यदि ऐरे को बहुत छोटा कर दिया गया था और हमने एक स्ट्रिंग को कॉपी करने की कोशिश की जो कि ऐरे से बड़ी है, तो स्ट्रिंग को एरे के अंत में कॉपी किया जाएगा। सरणी के अंत से परे मेमोरी में स्केच में उपयोग किए जाने वाले अन्य महत्वपूर्ण डेटा शामिल हो सकते हैं, जो तब हमारे स्ट्रिंग द्वारा ओवरराइट किए जाएंगे। यदि स्ट्रिंग के अंत से परे की मेमोरी खत्म हो गई है, तो यह स्केच को क्रैश कर सकता है या अप्रत्याशित व्यवहार का कारण बन सकता है।