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

مرجع کامل فارسی برنامه نویسی به زبان سی پلاس پلاس

  • Increase font size
  • Default font size
  • Decrease font size

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

فرستادن به ایمیل چاپ مشاهده در قالب پی دی اف

به نام خدا

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

افزودن نظر

دوست عزیز و کاربر گرامی
نظرات بعد از بررسی در سایت درج خواهند شد.
مطمئنا از شنیدن انتقادهای شما خوشحال خواهیم شد.
دلیل فیلتر کردن نظرات صرفا جلوگیری از نظرات مغایر با اسلام و جمهوری اسلامی ایران می باشد. امیدواریم ما را به خاطر این کار درک نمایید. با تشکر






کد امنیتی
بازنشانی