PDA

View Full Version : مبتدی: کلاسی جهت پیدا کردن نوع داده مورد نظر



raminlich
شنبه 15 شهریور 1393, 16:10 عصر
سلام فکر کنید یه فایل تکست دار مخلوطی از string , int ,time_t و........ هست حالا من می خوام بدونم تابعی هست که به عنوان مثال هر چی int هست رو پیدا کنه فقط طوری باشه که پیدا کنه فقط قابل نشان دادن نباشه بشه عملیاتی نثل جمع تفریق رو تک تک اینا انجام داد خیلی ممنون.

omid_kma
شنبه 15 شهریور 1393, 16:22 عصر
از regex (http://en.cppreference.com/w/cpp/header/regex)استفاده کن
مثال

#include <iostream>
#include <string>
#include <regex>

int main()
{
std::string str = "matn 123 matn 23";

std::regex reg("\\d+");
auto it =std::sregex_iterator(str.begin(), str.end(), reg);

int sum=0;
for (; it != std::sregex_iterator(); ++it) {
sum +=std::stoi(it->str());
}

std::cout << sum << '\n';
}

http://coliru.stacked-crooked.com/a/60be88fdf30e9723

raminlich
چهارشنبه 02 مهر 1393, 14:21 عصر
سلام
شرمنده بعد یه مدت دوباره تاپیکو اوردم بالا ولی نبودم نتونستم پست بزنم ولی امید جان من اومدم اینو کامپایل کنم(استاندارد C++‎‎‎‎‎‎‎‎‎11 هم اضاف کردم ) البته با Qt اینجور ارور داد:

undefined reference to `std::regex_iterator<__gnu_cxx::__normal_iterator<char const*, std::string>, char, std::regex_traits<char> >::regex_iterator(__gnu_cxx::__normal_iterator<char const*, std::string>, __gnu_cxx::__normal_iterator<char const*, std::string>, std::basic_regex<char, std::regex_traits<char> > const&, std::bitset<11u>)'


اومدم با Dev کامپایل کنم اینجور ارور داد قضیه چیه؟

[Error] 'stoi' was not declared in this scope
:عصبانی++:

omid_kma
چهارشنبه 02 مهر 1393, 18:46 عصر
کامپایلر پیش فرض Qt یعنی gcc 4.8 هدر regex ی C++‎‎‎‎‎‎‎‎‎11 رو نداره .
Dev هم که کامپایلر خیلی قدیمی تری داره !!
یا کامپایلرتون رو آپدیت کنید
یا می تونین از QRegexp هم استفاده کنین .

#include <QDebug>
#include <QString>
#include <QRegExp>

int main()
{
QString str = "matn 123 matn 23";
QRegExp reg("\\d+");
int sum=0;
for(int pos=0;pos >=0;){
pos = reg.indexIn(str,pos) ;
if(pos !=-1){
pos += reg.cap().size();
sum += reg.cap(0).toInt();
}
}
qDebug() << sum << '\n';
}