چگونگی تقسیم متن به دو یا چند کاراکتر
اول از هر چیزی دوست دارم به شما هشدار دهم که از کدی که برای مقاله ای با عنوان مشابه ای توسط Sean Genge نوشته شده استفاده نکنید…
به طور کلی تقسیم رشته با استفاده از STL و ++C بسیار آسان است. در STL دو تابع ‘getline’ مختلف برای انجام این کار وجود دارد. یکی از آن ها مربوط به std::iostream بوده و نیازمند بافری از کارکترهاست و در نتیجه مناسب نیست. اما تابع دیگر از توابع عمومی در std::string می باشد که اجازه تعریف کارکتر پایان دهنده را فراهم می کند.
#include <string>
#include <iostream>
#include <sstream>
int main(int argc, char** arv)
{
// initialize input stream with data
std::istringstream ins("this is a text");
// load words to this container
std::string out;
// read the words until some data in the input stream
while (ins.good())
{
getline(ins, out, ' '); // tell getline to stop on ' ' character
if (!out.empty()) // just fast way to remove unnecessary spaces
std::cout << out << std::endl;
}
return 0;
}
راه دیگر این است که فقط از ANSI استفاده کنیم. اگرچه کمی خطرناک است اما سرعت آن بالاتر است. برای این کار از تابع ‘strtok’ استفاده کنید. نام این تابع از دو کلمه string و token گرفته شده است.
#include <stdio.h>
#include <string.h>
int main(int argc, char** argv)
{
// this function will stop on any of these characters
char const delimiters[] = " \t\n\r";
// initial string to split
char ins[] = "this is a text";
// this pointer will point to the next word after every 'strtok' call
char *tok = strtok(ins, delimiters);
// if returned pointer is NULL, then there is no more words
while (۰ != tok)
{
puts(tok); // print the word
tok = strtok(NULL, delimiters); // move to the next one
}
return 0;
}
هر دو برنامه خروجی زیر را چاپ می کند:
this
is
a
text
شاید کسی بتواند رشته ها را با استفاده از توابع مشابه sscanf تقسیم کند اما برای این کار باید نوع پارامترها و گاهی تعداد آن ها را بدانید. در هر صورت اگر قصد دارید کد آن را خودتان بسازید شما را از این کار باز می دارم چون افراد دیگر آن را انجام داده اند و دوباره کاری است مگر اینکه کد شما با ثبات باشد. موفق باشید.
منبع: سایت cplusplus.com نوشته Viktar Khutko
ترجمه و ویرایش: مرجع فارسی سی پلاس پلاس به آدرس cplusplus.ir
نویسنده: تمدن
لازم به ذکر است که دامنه cplusplus.ir توسط من تهیه شده و در حال حاضر محتوای سایت را روی وبلاگ بارگذاری کرده ام ;)
برای مشاهدۀ فهرست مطالب به آدرس tamadon.net/cpp مراجعه فرمایید.
دیدگاه خود را ثبت کنید
تمایل دارید در گفتگو شرکت کنید؟نظری بدهید!