نقل قول: اشاره گری از رشته ها
سورس کامل می ذاشتید بشه اجرا کرد ... data type ها هم که مشخص نیست... این طوری هست؟
string oneStr;
char *Array;
nor هم نفهمیدم واسه چی هست و کجا ازش استفاده کردید. به هر حال یه مشکل که همون assignment برای Array هست. اگه منظورت اینه که string کپی شه باید از چیزی مثل memcpy یا strcpy استفاده کنی.
نقل قول: اشاره گری از رشته ها
سلام دوست من!
data types مشخصه! یک سری از متغیرها و ثوابت در قسمت private در header file تعریف شدند. یک سری هم در داخل توابع.
nor هم همون اشاره گری از رشته هاست. که قراره همه کلمات این رشته توش ذخیره شه و پس از اجرای تابع CountWord دارای مقداره!
در مورد قرار دادن کل برنامه!
قسمت هایی که گذاشتم بخش کوچکی از برنامه منه! و کل برنامه شامل فایل های متععدی است. برای اجرا می تونید در فایل main یک شی از این کلاس درست کنید با مقدار سازنده شامل یک رشته ( که مثلا یک جمله باشه! )
#include <iostream>
using namespace std;
int main()
{
Process_Core myStr("This is my problem!";
cout << myStr.CountWord << endl;
return 0;
}
البته این کلاس هنوز جای کار داره! مثلا نیاز به یک تابع display دارم برای این که تک تک کلمات رو از اشاره گر nor نمایش بدم! ( البته بعد از اجرای تابع CountWord )
ممنون میشم کمک کنید!
نقل قول: اشاره گری از رشته ها
سلام دوست عزیز.
یه سرچ در مورد تابع strtoken بکن. فکر کنم کارت رو راه بندازه. این رشته رو بصورت token با یه رشته جدا کننده برات بر می گردونه.
سرچش ضرر نداره.
یا علی!
نقل قول: اشاره گری از رشته ها
کدهای شما شاید بخاطر ادغام روش ++C و C اینطور پیچیده شده...
من پیشنهاد میکنم این روش را (++C خالص):
#include <string>
#include <vector>
#include <iostream>
using std::string;
using std::vector;
int main()
{
std::string my_str ("This is my problem! oh... it was.");
vector <string> tokens;
int i (0);
int end_pos;
while (end_pos != string::npos)
{
end_pos = my_str.find (' ', i);
tokens.push_back (my_str.substr (i, end_pos - i));
i = end_pos + 1;
}
for (vector <string>::const_iterator iter = tokens.begin (); iter != tokens.end (); ++iter)
{
std::cout << *iter << std::endl;
}
}
یا اینکه از همان بطور کلی بر روی آرایه و اشارهگرها مانور دهید. همانطور که دوست عزیز در پاسخ قبل گفتند، میتوانید از strtok هم استفاده کنید که برای زبان C هم کاربرد دارد، باید برای گرفتن کلمات، این تابع را چند بار صدا بزنید.
نقل قول: اشاره گری از رشته ها
ا... تو فایل هدر من oneStr و nor و Array نبود. احتمالا قبل از ویرایش فایل ناقص بود. این برنامه ی اصلاح شده شما:
#include "string.h"
#include <iostream>
using namespace std;
Process_Core::Process_Core(string str)
{
const int MAXWORDS=50;
Array = new char[str.length()+1];
nor = new string[MAXWORDS];
myStr = str;
}
string Process_Core::getString()
{
return myStr;
}
int Process_Core::CountWord()
{
num = 0;
oneStr = "";
int m;
strcpy (Array, myStr.c_str());
for(int i = 1 ; Array[i] ; i++)
{
if(Array[i] == ' ' && Array[i-1] != ' ')
{
num++;
if(num == 1)
m = i + 1;
else
{
int n = i - 1;
for(int j = m ; j <= n ; j++ )
oneStr += Array[j];
*nor = oneStr;
nor++;
int m = i + 1;
}
}
}
num++;
return num;
}
ولی من جات بودم به جای تبدیل به c_str از همون توابع کلاس string و از string_iterator برای حلقه استفاده می کردم.
=====ویرایش=====
من آفلاین داشتم تایپ می کردم که دوستی قبل از من پاسخ داد. همونطور که گفتم استفاده از روش ایشون جالب تره. یا با C کد بزنید یا با Cpp. البته با iterator نسبت به find بهینه تر هم خواهد شد.