چگونگی تقسیم متن به دو یا چند کاراکتر

جمعه ، 7 تیر 1392 ، 10:51 مدیریت کل سایت
چاپ

به نام خدا

اول از هر چیزی دوست دارم به شما هشدار دهم که از کدی که برای مقاله ای با عنوان مشابه ای توسط 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 (0 != 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

آخرین بروز رسانی مطلب در جمعه ، 7 تیر 1392 ، 10:59