আমি C ++ স্ট্রিংয়ের প্রতিটি চরিত্রের লুপের জন্য কীভাবে করব?
char
, ইউনিকোড কোড পয়েন্ট, বর্ধিত গ্রাফিয়াম গুচ্ছ?
index
উত্তরের অংশটি নিয়ে চিন্তা করবেন না ।
আমি C ++ স্ট্রিংয়ের প্রতিটি চরিত্রের লুপের জন্য কীভাবে করব?
char
, ইউনিকোড কোড পয়েন্ট, বর্ধিত গ্রাফিয়াম গুচ্ছ?
index
উত্তরের অংশটি নিয়ে চিন্তা করবেন না ।
উত্তর:
ক এর অক্ষরগুলির মধ্য দিয়ে লুপিং করা std::string
, লুপের জন্য একটি পরিসীমা-ভিত্তিক ব্যবহার করা (এটি সি ++ 11 এর, এটি ইতিমধ্যে জিসিসি, ঝনঝন এবং ভিসি 11 বিটার সাম্প্রতিক প্রকাশে সমর্থিত):
std::string str = ???;
for(char& c : str) {
do_things_with(c);
}
পুনরাবৃত্তকারীগুলির std::string
সাথে একটি এর অক্ষরের মধ্য দিয়ে লুপিং :
std::string str = ???;
for(std::string::iterator it = str.begin(); it != str.end(); ++it) {
do_things_with(*it);
}
std::string
লুপের সাথে পুরানো ধাঁচের অক্ষরের মধ্য দিয়ে লুপিং :
std::string str = ???;
for(std::string::size_type i = 0; i < str.size(); ++i) {
do_things_with(str[i]);
}
নাল-টার্মিনেটেড অক্ষর অ্যারের অক্ষরের মধ্য দিয়ে লুপিং:
char* str = ???;
for(char* it = str; *it; ++it) {
do_things_with(*it);
}
std::string
, যা কেবল বাইটের একটি সিরিজ।
A for লুপটি এভাবে প্রয়োগ করা যেতে পারে:
string str("HELLO");
for (int i = 0; i < str.size(); i++){
cout << str[i];
}
এটি অক্ষরে অক্ষরে স্ট্রিং অক্ষর মুদ্রণ করবে। str[i]
সূচকে অক্ষরটি প্রদান করে i
।
এটি যদি একটি চরিত্রের অ্যারে হয়:
char str[6] = "hello";
for (int i = 0; str[i] != '\0'; i++){
cout << str[i];
}
মূলত উপরের দুটিটি সি ++ দ্বারা সমর্থিত দুটি ধরণের স্ট্রিং রয়েছে। দ্বিতীয়টিকে সি স্ট্রিং বলা হয় এবং প্রথমটিকে স্টডি স্ট্রিং বা (সি ++ স্ট্রিং) বলা হয় I আমি সি ++ স্ট্রিং ব্যবহার করার পরামর্শ দেব, হ্যান্ডেল করা অনেক সহজ।
আধুনিক সি ++ এ:
std::string s("Hello world");
for (char & c : s)
{
std::cout << "One character: " << c << "\n";
c = '*';
}
সি ++ 98/03 এ:
for (std::string::iterator it = s.begin(), end = s.end(); it != end; ++it)
{
std::cout << "One character: " << *it << "\n";
*it = '*';
}
কেবল পঠনযোগ্য পুনরাবৃত্তির জন্য, আপনি std::string::const_iterator
C ++ 98 এবং for (char const & c : s)
কেবলমাত্র for (char c : s)
C ++ 11 এ ব্যবহার করতে পারেন ।
auto
সর্বদা একটি ভাল ধারণা। এটা মধ্যে পার্থক্য ব্যবহারের সময় begin()
এবং cbegin()
প্রাসঙ্গিক হয়ে ওঠে।
char & c
)? চরিত্রের মানটির প্রয়োজনের ক্ষেত্রে এটি কেবলমাত্র পরিবর্তনের অনুমতি দেওয়া?
মানক অ্যালগরিদম ব্যবহার করে এটি করার আরও একটি উপায় এখানে।
#include <iostream>
#include <string>
#include <algorithm>
int main()
{
std::string name = "some string";
std::for_each(name.begin(), name.end(), [] (char c) {
std::cout << c;
});
}
const char* str = "abcde";
int len = strlen(str);
for (int i = 0; i < len; i++)
{
char chr = str[i];
//do something....
}
strlen
লুপ অবস্থায় ব্যবহার করা ভাল ফর্ম হিসাবে বিবেচিত হয় না , কারণ এটি প্রতিটি পুনরাবৃত্তির জন্য স্ট্রিংয়ে একটি ও (এন) অপারেশন প্রয়োজন, পুরো লুপটিকে O (n) করে তোলে ^ 2) স্ট্রিংয়ের আকারে। strlen
লুপ অবস্থায় স্ট্রিং পরিবর্তিত হয় তবে লুপের জন্য ডাকা যেতে পারে, তবে এটির ক্ষেত্রে এটি প্রয়োজনীয় যেখানে সংরক্ষণ করা উচিত ।
আমি "সি স্ট্রিং" দিয়ে লুপের উপর ভিত্তি করে ব্যাপ্তি ব্যবহার করে কোনও উদাহরণ দেখছি না।
char cs[] = "This is a c string\u0031 \x32 3";
// range based for loop does not print '\n'
for (char& c : cs) {
printf("%c", c);
}
সম্পর্কিত নয় কিন্তু int অ্যারে উদাহরণ
int ia[] = {1,2,3,4,5,6};
for (int& i : ia) {
printf("%d", i);
}
সি-স্ট্রিং ( char []
) এর জন্য আপনার এমন কিছু করা উচিত:
char mystring[] = "My String";
int size = strlen(mystring);
int i;
for(i = 0; i < size; i++) {
char c = mystring[i];
}
জন্য std::string
আপনি ব্যবহার করতে পারেন str.size()
এর আকার এবং বারবার উদাহরণটি পেতে একটি পুনরুক্তিকারীর ব্যবহার করতে পারে, অথবা:
std::string mystring = "My String";
std::string::iterator it;
for(it = mystring.begin(); it != mystring.end(); it++) {
char c = *it;
}
for (int x = 0; x < yourString.size();x++){
if (yourString[x] == 'a'){
//Do Something
}
if (yourString[x] == 'b'){
//Do Something
}
if (yourString[x] == 'c'){
//Do Something
}
//...........
}
একটি স্ট্রিং মূলত অক্ষরের একটি অ্যারে, তাই আপনি অক্ষরটি পেতে সূচি নির্দিষ্ট করতে পারেন। আপনি যদি সূচকটি জানেন না, তবে আপনি উপরের কোডের মতো লুপটি করতে পারেন, তবে আপনি যখন তুলনা করছেন, তখন নিশ্চিত করুন যে আপনি একক উদ্ধৃতি ব্যবহার করেছেন (যা একটি অক্ষর নির্দিষ্ট করে)।
তা বাদে উপরের কোডটি স্ব-বর্ণনামূলক।
স্ট্রিং লাইব্রেরির at ফাংশনটি ব্যবহার করে আপনি প্রতিটি চরকে স্ট্রিংয়ে পেতে পারেন, যেমন আমি এটি এটি করেছিলাম
string words;
for (unsigned int i = 0; i < words.length(); i++)
{
if (words.at(i) == ' ')
{
spacecounter++; // to count all the spaces in a string
if (words.at(i + 1) == ' ')
{
i += 1;
}
এটি আমার কোডের কেবলমাত্র একটি অংশ তবে বিন্দুটি হল আপনি অক্ষরগুলি অ্যাক্সেস করতে পারেন stringname.at(index)
std::string
?