"Xyz" দিয়ে স্ট্যান্ডিং স্ট্রিং শুরু হচ্ছে কিনা তা আমাকে পরীক্ষা করে দেখতে হবে। পুরো স্ট্রিংটি অনুসন্ধান না করে বা সাবস্ট্রটার () দিয়ে অস্থায়ী স্ট্রিং তৈরি না করে কীভাবে করব।
উত্তর:
আমি তুলনা পদ্ধতি ব্যবহার করব:
std::string s("xyzblahblah");
std::string t("xyz")
if (s.compare(0, t.length(), t) == 0)
{
// ok
}
স্ট্যান্ডার্ড লাইব্রেরির স্পিরিটের সাথে মিল রেখে আরও এমন একটি পন্থা হ'ল আপনার নিজস্ব_সংশ্লিষ্ট আলগোরিদিম সংজ্ঞায়িত করা।
#include <algorithm>
using namespace std;
template<class TContainer>
bool begins_with(const TContainer& input, const TContainer& match)
{
return input.size() >= match.size()
&& equal(match.begin(), match.end(), input.begin());
}
এটি ক্লায়েন্ট কোডগুলিতে একটি সহজ ইন্টারফেস সরবরাহ করে এবং বেশিরভাগ স্ট্যান্ডার্ড লাইব্রেরি পাত্রে উপযুক্ত।
বুস্টের স্ট্রিং অ্যালগো লাইব্রেরির দিকে নজর দিন , এতে বেশ কয়েকটি দরকারী ফাংশন রয়েছে যেমন: start_with, istart_with (কেস সংবেদনশীল), ইত্যাদি ইত্যাদি যদি আপনি আপনার প্রকল্পে বুস্ট লাইব্রেরির অংশ ব্যবহার করতে চান তবে অনুলিপি করতে আপনি বিসিপি ইউটিলিটি ব্যবহার করতে পারেন শুধুমাত্র ফাইল দরকার
দেখে মনে হচ্ছে যে স্টাড :: স্ট্রিং :: সূচনা_ও সি ++ এর মধ্যে রয়েছে 20 এর মধ্যে, স্টাড :: স্ট্রিং :: সন্ধানটি ব্যবহার করা যেতে পারে
std::string s1("xyzblahblah");
std::string s2("xyz")
if (s1.find(s2) == 0)
{
// ok, s1 starts with s2
}
std::string::compare
কারণ এটির আকারটি খুঁজে না পাওয়ার জন্য আক্ষরিক সাথে পুনরায় না বলে স্ট্রিংটি আক্ষরিক দিয়ে শুরু হয় কিনা তা পরীক্ষা করা সহজ করে তোলে। এবং সি ++ 20 সরাসরি সমাধানের দিকে নির্দেশ করার জন্য ধন্যবাদ।
আমি অনুভব করছি আমি আপনার প্রশ্নটি পুরোপুরি বুঝতে পারছি না। দেখে মনে হচ্ছে এটি তুচ্ছ হওয়া উচিত:
s[0]=='x' && s[1]=='y' && s[2]=='z'
এটি কেবলমাত্র (সর্বাধিক) প্রথম তিনটি অক্ষর দেখায়। সংকলনের সময় অজানা একটি স্ট্রিংয়ের সাধারণীকরণের জন্য আপনাকে উপরেরটি একটি লুপ দিয়ে প্রতিস্থাপন করতে হবে:
// look for t at the start of s
for (int i=0; i<s.length(); i++)
{
if (s[i]!=t[i])
return false;
}
t
।