বিষয়বস্তুতে চলুন

বেসিক সি/সাবটাইটেল

উইকিবই থেকে

স্ট্যান্ডার্ড সি স্ট্রিংগুলির অসতর্ক ব্যবহার মারাত্মক ত্রুটির কারণ হতে পারে। BasicC স্ট্রিং ম্যানিপুলেশন ফাংশন সহজ এবং নিরাপদ অফার করে।
#define STRLEN 255
ধ্রুবক STRLEN 255 এর একটি ডিফল্ট মান দিয়ে সংজ্ঞায়িত করা হয়েছে, যা STRING প্রকারের স্ট্রিংগুলির সর্বাধিক দৈর্ঘ্য নির্দেশ করে (শেষ চিহ্ন '\ 0' ব্যতীত)। স্ট্রলেন ফাংশনের সাথে বিভ্রান্ত হবেন না, যা একটি প্রদত্ত স্ট্রিংয়ের দৈর্ঘ্য প্রদান করে। এই মানটির একটি অনুরূপ হ্রাস সাবটাইটেলগুলিতে কিছু ক্রিয়াকলাপকে গতি দেয়৷
typedef char STRING [STRLEN + 1];
STRING ডেটা প্রকার সর্বাধিক দৈর্ঘ্য STRLEN এর স্ট্রিংয়ের জন্য সংজ্ঞায়িত করা হয়েছে।
STRING STRING $;
কিছু স্ট্রিং অপারেশনে ব্যবহৃত STRING প্রকারের একটি STRING $ সহায়ক ভেরিয়েবল সংজ্ঞায়িত করা হয়েছে৷

সংস্করণ 1.23 থেকে, ভেরিয়েবলে সংরক্ষিত স্ট্রিংটির প্রকৃত দৈর্ঘ্য সম্পর্কে তথ্য সম্বলিত বর্ধিত STRING প্রকারে কাজ করা কমান্ডগুলি চালু করা হয়েছে। এটি একটি উচ্চ STRLEN মান সহ পাঠ্যগুলিতে ক্রিয়াকলাপের গতি বাড়ানোর জন্য। নতুন প্রকার ঘোষণা করা হয় না, STRING প্রকার ব্যবহার করা হয়, অ্যারের শেষ কক্ষে স্ট্রিং দৈর্ঘ্য (STRLEN সূচক সহ) স্ট্রিংটি ম্যানুয়ালি প্রবেশ করানো উচিত। এই ভেরিয়েবলে কাজ করে এমন $ চিহ্ন দিয়ে চিহ্নিত কমান্ডগুলি স্বয়ংক্রিয়ভাবে এটি করে। কারণ আমরা একটি সেলও দখল করছি - এই ধরনের একটি স্ট্রিং STRLEN-1-এর সর্বোচ্চ দৈর্ঘ্য থাকতে পারে, STRLEN 256-এর বেশি হতে পারে না। তাই BasicC কমান্ড 3 ধরনের স্ট্রিং-এ কাজ করতে পারে: char * - C এর জন্য স্ট্যান্ডার্ড (যেকোন ক্যারেক্টার অ্যারে) ; STRING - STRLEN + 1 দৈর্ঘ্যের অক্ষরের অ্যারে; শেষ কক্ষে স্ট্রিংটির দৈর্ঘ্য সম্পর্কে তথ্য সহ STRING, যাকে পরে $ বলা হবে। এই ধরনের পশ্চাদপদ সামঞ্জস্যপূর্ণ. সাধারণত, $ এর সাথে মেলে এমন কমান্ডগুলি $ দিয়ে শেষ করা হয়।
বেশিরভাগ স্ট্রিং কমান্ডের জন্য string.h লাইব্রেরি প্রয়োজন, যা BasicC-তে ডিফল্টরূপে অন্তর্ভুক্ত থাকে।

সংজ্ঞা: strncat (A, B, STRLEN-strlen (A));
কমান্ডটি '\ 0' অক্ষর, সর্বাধিক STRLEN-লেন (A) অক্ষর সহ ভেরিয়েবল A-তে স্ট্রিং এর শেষে ('\ 0' অক্ষর দিয়ে শুরু) স্ট্রিং B-কে কপি করে। ফলাফল হল যে চেইন A এর সাথে যুক্ত হবে পূর্ববর্তী A চেইন B এর সাথে।
"টেক্সট" + "টেক্সট2" সূত্রটি শুধুমাত্র স্ট্রিং অবজেক্টের জন্য C ++-এ অনুমোদিত, যা বেসিক STRING ব্যতীত অন্য কিছু।

সাধারণত $ ভেরিয়েবলের জন্য অ্যাড কমান্ডের দ্রুত সমতুল্য। এটি A [STRLEN] এবং B [STRLEN] কক্ষে সংরক্ষিত স্ট্রিংগুলির দৈর্ঘ্য সম্পর্কে তথ্য ব্যবহার করে, ফলস্বরূপ টেবিল A-তে লিঙ্কযুক্ত স্ট্রিংয়ের দৈর্ঘ্য সম্পর্কেও তথ্য সংরক্ষণ করা হয়। ডিবাগ সমর্থন করে।

এটি অ্যাড কমান্ডের অনুরূপভাবে কাজ করে, কিন্তু পরিবর্তনশীল A ​​পরিবর্তন করে না, ফলাফলটি ভেরিয়েবল STRING $ এ লিখে, এই ভেরিয়েবলে একটি পয়েন্টার প্রদান করে। এটি অ্যাড কমান্ডের চেয়ে ধীর গতিতে কাজ করে, STRLEN-1 পর্যন্ত 3 ধরনের ভেরিয়েবলে কাজ করে, ফলাফল $ এর সাথে সামঞ্জস্যপূর্ণ। ডিবাগ সমর্থন করে।

একটি অক্ষরকে একটি স্ট্রিং এ রূপান্তর করে। ফাংশনটি C অক্ষর দিয়ে গঠিত $ এর সাথে সামঞ্জস্যপূর্ণ একটি স্ট্রিং প্রদান করে (+ স্ট্রিং '\ 0' এর শেষ), এই স্ট্রিংটি STRING $ অ্যারের STRLEN-2 অবস্থান থেকে তৈরি করা হয়েছে, তাই যদি এতে STRLEN-এর চেয়ে ছোট একটি স্ট্রিং থাকে 2 - এটি অপরিবর্তিত থাকবে, এটি শুধুমাত্র তার দৈর্ঘ্য সম্পর্কে তথ্য হারিয়ে যাবে।

সংজ্ঞা: strcmp (A, B)
B এর সাথে স্ট্রিং A তুলনা করুন, 0 প্রদান করে যদি তারা একই হয়,> 0 যদি A> B, <0 যদি A< B হয়।

সংজ্ঞা: strlen (A)
একটি স্ট্রিং এর দৈর্ঘ্য প্রদান করে।

সংজ্ঞা: (স্বাক্ষরবিহীন চর) A [STRLEN]
A টাইপ $ এর জন্য লেনের দ্রুত সংস্করণ।

LenChr (S, d, n)

[সম্পাদনা]

এটি অবস্থান d থেকে শুরু করে n অক্ষর (বা স্ট্রিংয়ের শেষ পর্যন্ত) S স্ট্রিং-এর অক্ষরের সংখ্যা দেয়। ফাংশনটি এই সত্যটিকে বিবেচনা করে যে কিছু অক্ষর (যেমন পোলিশ ডায়াক্রিটিক) বেশ কয়েকটি অক্ষর (বাইট) নিয়ে গঠিত। ASCII রেঞ্জ 0-127 এর বাইরের মান সহ এবং অনুমান করে যে তারা 2টি অক্ষর। প্রতি অক্ষর> 2টি অক্ষর সহ এনকোডিং সমর্থন করে না! d একটি অক্ষর অ্যারে পয়েন্টার, একটি অক্ষর সংখ্যা নয়। n হল অক্ষরের সংখ্যা এবং ঋণাত্মক হতে পারে, এই ক্ষেত্রে অনুসন্ধানটি পিছনের দিকে এগিয়ে যায়। যদি অনুসন্ধানটি একটি 2-বাইট অক্ষর দিয়ে শুরু হয় - d অবশ্যই সেই অক্ষরের প্রথম অক্ষরের দিকে নির্দেশ করতে হবে, এবং পিছনে অনুসন্ধান করার সময় - দ্বিতীয়টিতে, অর্থাৎ শেষ থেকে প্রথম।

LenUTF (S, d, k)

[সম্পাদনা]

d অবস্থানে থাকা অক্ষর থেকে শুরু করে k, k> = d> 0 অক্ষর পর্যন্ত S ক্রমানুসারে অক্ষরের সংখ্যা ফেরত দেয়। বিবেচনা করুন যে চিঠিটি 2 নন-ASCII 0-127 অক্ষর হতে পারে।

সংজ্ঞা: memmove (A, B, STRLEN + 1);
স্ট্রিং B কে ভেরিয়েবল A-তে কপি করে। {A [0] = '\ 0'; strncat (A, B, STRLEN);} একই রকম প্রভাব ফেলে, এবং সম্ভবত দ্রুত, কিন্তু Let ( A) এর জন্য , A) নাল স্ট্রিং ফিরিয়ে দেবে।
সি ল্যাঙ্গুয়েজ, বেসিক সি-তেও, টাইপ ভেরিয়েবল = "টেক্সট" একটি এক্সপ্রেশন শুধুমাত্র একটি ভেরিয়েবল ঘোষণা করার সময় অনুমোদিত হয়, বাকি প্রোগ্রামে এটি শুধুমাত্র স্ট্রিং ক্লাস ব্যবহার করে সি ++ এ সম্ভব। কপি কমান্ড ব্যবহার করা উচিত।

সংজ্ঞা: {memmove (A, B, B [STRLEN] +1); A [STRLEN] = B [STRLEN];}
সাধারণত দ্রুত Let-এর জন্য B মেলে $।

LetMid (T, S, a, n)

[সম্পাদনা]

সংজ্ঞা: {memmove (T, & S [a], n); T [n] = 0;}
কপিএগুলিকে স্ট্রিং S-এর পরিবর্তনশীল T n অক্ষরগুলিতে a অবস্থানের অক্ষর থেকে, শেষে '\ 0' অক্ষর যোগ করে। এন্ট্রিগুলি 0 থেকে সংখ্যা করা হয়েছে৷ ডিবাগ সমর্থন করে৷

মনোযোগ ! কোনো বোর্ড ওভাররান নিয়ন্ত্রণ! ওভাররান এড়াতে, STRLEN বা Min (n, STRLEN) n হিসাবে নির্দিষ্ট করা যেতে পারে।

LetMid $ (T, S, a, n)

[সম্পাদনা]

এস এর জন্য LetMid $ মেলে। ডিবাগ সমর্থন করে৷

মনোযোগ ! কোনো বোর্ড ওভাররান নিয়ন্ত্রণ!

Memset(A, N, B)

[সম্পাদনা]

সংজ্ঞা: মেমসেট (A, B, N);
A দ্বারা নির্দেশিত মেমরিতে B-এর N বাইট সন্নিবেশ করা হয়। A একটি স্ট্রিং ভেরিয়েবল এবং B একটি উদ্ধৃত অক্ষর হতে পারে, তবে, কোনো ওভারফ্লো চেক নেই এবং মনে রাখবেন যে স্ট্রিংটি 0 দিয়ে শেষ হওয়া উচিত।

এই ফাংশনটি LetMid (STRING $, S, a, n) এর মত কাজ করে, কিন্তু অতিরিক্তভাবে STRING $ ভেরিয়েবলের সাথে মিলিত $, অর্থাৎ ফলাফল স্ট্রিং-এ একটি পয়েন্টার প্রদান করে। সব 3 ধরনের কাজ করে. ডিবাগ সমর্থন করে৷

মনোযোগ ! কোনো বোর্ড ওভাররান নিয়ন্ত্রণ!

ফাংশন একটি টেক্সট স্ট্রিং প্রদান করে যা $ এর সাথে মেলে, স্ট্রিং S থেকে গঠিত। মূল ব্যবহার হল ম্যানুয়ালি একটি ফাংশনের আর্গুমেন্ট হিসাবে টেক্সট প্রবেশ করানো যার জন্য $ মেলে এমন একটি স্ট্রিং প্রয়োজন। এটি বেশ ধীর এবং STRING $ ভেরিয়েবল ব্যবহার করে, তাই উদাহরণস্বরূপ Let $ (a, Mk $ ("text")) এর পরিবর্তে Let (a, "text") স্ট্রিং $ (a) ব্যবহার করা ভাল।

সংজ্ঞা: strtod (S, NULL)
স্ট্রিং S থেকে রূপান্তরিত একটি সাংখ্যিক মান প্রদান করে। যদি রূপান্তর সম্ভব না হয় - 0 প্রদান করে। ফাংশনের জন্য string.h লাইব্রেরির প্রয়োজন হয় না, stdlib.h এর জন্য ডিফল্টরূপে BasicC-তে অন্তর্ভুক্ত করা প্রয়োজন।

সংজ্ঞা: S [STRLEN] = strlen (S);
স্ট্রিং S কে $ এর সাথে সামঞ্জস্যপূর্ণ করে, অর্থাৎ শেষ কক্ষে এর দৈর্ঘ্য সঞ্চয় করে। এটি ব্যবহার করা হয়, উদাহরণস্বরূপ, $ এর সাথে সামঞ্জস্যপূর্ণ ভেরিয়েবল শুরু করতে।

সংজ্ঞা: snprintf (S, STRLEN + 1, "% .16lG", (ডাবল) D);
কমান্ডটি D সংখ্যাটিকে টেক্সটে রূপান্তর করে, যা নির্দিষ্ট ভেরিয়েবল এস-এ সংরক্ষিত থাকে। সংখ্যার সংখ্যা 16-এ সীমাবদ্ধ।

LetStr $ (S, D)

[সম্পাদনা]

সংজ্ঞা: S [STRLEN] = snprintf (S, STRLEN, "%. 16lG", (ডবল) D);
J. w., কিন্তু S $ এর সাথে সামঞ্জস্যপূর্ণ হবে। ডিবাগ সমর্থন করে।

LetStr $ (STRING $, D) এর মতো, এটি STRING $ এ একটি পয়েন্টার ফেরত দেয়, ফলে স্ট্রিং $ এর সাথে মেলে। ডিবাগ সমর্থন করে।

উপরের 3টি কমান্ডের জন্য string.h লাইব্রেরির প্রয়োজন নেই, তাদের প্রয়োজন stdio.h ডিফল্টরূপে BasicC-তে অন্তর্ভুক্ত করা।

মনোযোগ ! একই সাথে একই STRING $ ভেরিয়েবল ব্যবহার করে একাধিক কমান্ড ব্যবহার করার পরামর্শ দেওয়া হয় না, এটি অপ্রত্যাশিত ফলাফল আনতে পারে।

উদাহরণ:

#define DEBUG 1
#define STRLEN 33
#include "Basic.h"
STRING a$="napis1",b$="napis2",c="napis3";
MAIN
  String$(a$) String$(b$)
  Print$ Str$(123) NL
  Print$ a$ $ "+" $ b$ $ "=" );
  Add$(a$,b$)
  Print$ a$ _ Len$(a$) NL
  Print$ Cat$(a$,b$) $ a$ NL
  Print Cmp(a$,b$) NL
  Print Len(c) NL
  Let$(a$,b$)
  Print$ a$ _ Len$(a$) NL
  Print$ Mid$(c,1,30) NL
  Print Val("12345ABX") NL
  char *a="łódź";
  Print LenUTF(a,0,STRLEN) NL
  Print LenUTF(a,2,STRLEN) NL
  Print LenChr(a,2,STRLEN) NL
  Print LenChr(a,1,-5) NL
ENDMAIN