Learning ©➕➕
4.52K subscribers
81 photos
2 videos
38 files
182 links
ک
Download Telegram
زحمت ترجمه کتابخانه "string"را خانم محبوبه علینقی وآقای عبدالرحمان آزادی کشیدن از دو بزرگوار بخاطر کمکشون
سپاسگزاریم🙏🌺
@learncpp
🔸ترجمه کتابخانه "string (رشته ها)" از سایت رسمی برنامه نویسان ++C به آدرس
www.cplusplus.com/reference

@Learncpp
#cstring #string.h #memcpy
🔵رشته ها (string)

🔹تابع memcpy
void *memcpy(void *to,const void *from,unsigned count)

این تابع قسمتی از آرایه را در آرایه ی دیگر کپی می کند.

در الگوی فوق from اشاره گری است که به آرایه ی منبع ( آرایه ای که کاراکتر های مورد نظر در آنجا قرار دارند) و to اشاره گری است که به آرایه ی مقصد (آرایه ای که کاراکتر ها باید به آنجا کپی شوند ) اشاره می کند. تعداد کاراکتر هایی که باید کپی شوند با آرگومان count مشخص می شوند برای مثال اگر count برابر با 10، یعنی اولین 10 کاراکتر آرایه باشد، from باید به 10 محل اول آرایه ی to کپی شود. همانطور که از الگوی این تابع پیداست این تابع اشاره گری است که پس از مقایسه به آرایه ای اشاره می کند که to به آن اشاره می کرده است.

مثال)
#include <iostream>
#include <string.h>
using namespace std;

struct{
char name[40];
int age;
}person,person_copy;

int main( )
{
char myname[ ]="Ali_zamani";

/*using memcpy to copy string:*/
memcpy(person.name,myname,strlen(myname)+1);

person.age=46;

/*using memcpy to copy structure:*/
memcpy(&person_copy,&person,sizeof(person));
cout<<"person_copy:\n"<<person_copy.name,person_copy.age;
return 0;
}


Output:
Person_copy :
Ali_zamani, 46

مثال)
#include <string.h>
#include <iostream>
using namespace std;

int main ( )
{
const char src[10] = "@Learncpp";
char dest[10];
cout<<"Before memcpy dest = \n"<<dest;
memcpy(dest, src, strlen(src) + 1);
cout<<"\n After memcpy dest= \n"<<dest;
return 0;
}


Output:
Before memcpy dest=
After memcpy dest = @Learncpp

🔰ترجمه شده از سایت‌
www.cplusplus.com

@Learncpp
#cstring #string.h #memmove
🔵رشته ها (string)

🔹تابع memmove
void *memmove(void *to, const void *from,unsigned count)

این تابع تعدادی از کاراکترها را از آرایه ای به آرایه دیگر کپی می کند. تفاوت آن با memcpy در این است که اگر در تابع memcpy دو آرایه روی هم قرار گرفته باشند عمل کپی انجام نمی شود ولی در تابع memmove عمل کپی به درستی انجام می شود.

آرایه ای که from به آن اشاره می کند آرایه ی منبع و آرایه ای که to به آن اشاره می کند آرایه مقصد است

🔹پارامتر ها:

🔻مفهوم count :
مشخص می کند که چه تعداد کاراکتر از آرایه منبع به آرایه مقصد کپی شوند.

مثال)
#include <iostream>
#include <string.h>
using namespace std;

int main ( )
{
char str[ ]="memmove can be very useful...";
memmove(str+20,str+15,11);
puts(str);
return 0;
}


Output:
Memmove can be very very useful.

مثال)
#include <string.h>
#include <iostream>
using namespace std;

int main ( )
{
char dest[ ]="oldstring";
const char src[ ]="newstring";
cout<<"Before memmove dest = "<<src<<endl<<dest<<" "<<src;
memmove(dest,src,9);
cout<<"\nAfter memmove dest "<<src<<endl<<dest<<" "<<src;
return 0;
}


Output:
Before memmove dest = oldstring, src = newstring
After memmove dest = newstring, src = newstring

🔰ترجمه شده از سایت
www.cplusplus.com

@Learncpp
#cstring #string.h #strcpy
🔵رشته ها (string)

🔹تابع strcpy
char *strcpy(char *str1,const char *str2,unsigned count)

این تابع تعداد مشخصی از کاراکترهای رشته را در رشته ای دیگر کپی می کند

در الگوی فوق به تعداد count کاراکتر از رشته str2 در رشته str1 با شروع از ابتدای رشته ها کپی می شوند اگر تعداد کاراکترهایی که در str2 وجود دارند کمتر از مقدار count باشند به تعداد لازم کاراکتر تهی در انتهای str1 کپی می شوند.

مثال)
#include <iostream>

#include <string.h>

using namespace std;


int main( )

{

char str1[ ]="sample string";

char str2[40];

char str3[40];

strcpy(str2 , str1);

strcpy(str3 ,"copy successful");

cout<<"str1:"<<str1<<"\nstr2:"<<str2<<"\nstr3:"<<str3;

return 0;

}


Output:
Str1 : sample string
Str2 : sample string
Str3 : copy successful


مثال)
#include <iostream>

#include <string.h>

using namespace std;


int main( )

{

char src[40];

char dest[100];

memset(dest,'\0',sizeof(dest));

strcpy(src,"Learn c++ in @Learncpp");

strcpy(dest,src);

cout<<"Final copied string:\n"<<dest;

return 0;

}


Output:
Final copied string : Learn c++ in @Learncpp

🔰ترجمه شده از سایت
www.cplusplus.com

@Learncpp
#cstring #string.h #strncpy
🔵رشته ها (string)

🔹تابع strncpy

char *strncpy(char *destination,const char *source,size_t num);

این تابع یک مقدار از یک رشته را که ما مشخص می کنیم را درون یک رشته دیگر کپی می کند ولی رشته ی دوم را هیچ تغییری نمی دهد یعنی اگر یک قسمت از رشته ی دوم را درون رشته اول کپی کند آن قسمت از رشته دوم در مکانش مانده و هیچ تغییری نمی کند

🔹پارامتر ها:

🔻مفهوم destination :
این یک اشاره گر و رشته خالی هست که می خواهیم رشته ای داخل آن قرار دهیم

🔻مفهوم source :
این همان رشته ای است که می خواهیم قسمتی از آن را در destination کپی کنیم

🔻مفهوم num :
به اندازه ی num کاراکتر از source داخلdestination کپی می شود کاری هم نداشته باشیم size_t چی هست فقط آن تعداد کاراکتری که لازم داریم تعداد آن را جای num قرار می دهیم

🔹مقادیر بازگشتی :
مقدار destination را بر می گرداند.


1. #include <iostream>

2. #include <string.h>

3. using namespace std;


4. int main ( )

5. {

6. char str1[ ]="To be or not to be";

7. char str2[40];

8. char str3[40];


9. /*copy to sized buffer (overflow safe):*/

10. strncpy(str2,str1,sizeof(str2) );


11. /*partial copy (only 5 chars):*/

12. strncpy(str3,str2,5);


13. /*null character manually added*/

14. str3[5] = '\0'; 


15. puts (str1);

16. puts (str2);

17. puts (str3);


18. return 0;

19. }


Output:
To be or not to be
To be or not to be
To be

در این مثال str1 معرفی و با جمله ی معروف شکسپیر مقداردهی می شود ولی str2 و str3 فقط تعریف می شوند.
در خط 10 کل str1 در str2 کپی می شود اما چگونه؟
وقتی ما می گوییم sizeof(str1) یعنی آن مقدار حافظه ای که توسط str1 گرفته شده را به ما بدهد و از قضا مقدار حافظه ی str1 با تعداد کاراکترهای آن یکی می شود، چرا؟
چون هر کاراکتر از لحاظ غیر رسمی فقط یک بایت حافظه می گیرد یعنی مثلا اگر str1 به تعداد 18 کارکتر داشته باشد 18 تا یک بایت می شود 18 بایت پس sizeof(str1) می شود 18 و این تابع هم تمام 18 کاراکتر str1 رو داخل str2 کپی می کند.
در خط 12 فقط 5 کاراکتر از str2 کپی می شود در str3
و در خط 14 مقدار null به آخر str3 اضافه می شود تا آخر آن معلوم شود . دلیل آن هم این هست که این تابع خود به خود مقدار‌ null را بهdestination اضافه نمی کند
در پایان تمام آنها را چاپ میکند ...

🔰ترجمه شده از سایت
www.cplusplus.com

@Learncpp
#cstring #string.h #strcat
🔵رشته ها (string)

🔹تابع strcat

char *strcat(char *destination,const char *source);

این تابع که داخل لیست مهم ترین توابع کار با رشته ها قرار می گیرد یک رشته را به یک رشته ی دیگر وصل می کند ولی باید دقت کنیم که کاراکتر null که آخر destination هست حذف می شود و به جای آن اولین کاراکتر source اضافه می شود و یک کاراکتر null به انتها رشته ی جدید اضافه می شود.

🔹پارامتر ها:

🔻مفهوم destination :
این یک اشاره گر به همان رشته ای است که قرار است بزرگتر شود یا به عبارتی یک رشته ی دیگر به انتهای آن وصل می شود البته باید طول آن به اندازه ای باشد که بتواند یک رشته ی دیگر را داخل خودش جای دهد و اگر نه معلوم نیست اگر طولش کم باشد کاراکتر هایی که داخل این رشته فضایی نگرفتند کجای حافظه گم شوند.

🔻مفهوم source :
این همان رشته ای است که قرار است به انتهاdestination اضافه شود و صد البته که نمی تواند خود destination باشد.
ولی اگر می خواهیم یک رشته را به انتها خودش اضافه کنیم باید آن را داخل یک رشته ی دیگر کپی کنیم سپس آن رشته جدید را به آخر رشته ی خودمان اضافه کنیم.

مثال)
#include <iostream>

#include <string.h>

using namespace std;


int main ( )

{

char str[80];

strcpy(str,"these ");

strcat(str,"strings ");

strcat(str,"are ");

strcat(str,"concatenated.");

puts(str);

return 0;

}


Output:
these strings are concatenated.

در این مثال ابتدا یک رشته را با strcpy داخل str کپی می کند سپس با هر بار اجرای strcat یک کلمه را به انتها str اضافه می کند تا یک جمله ی کامل شکل بگیرد

#include <iostream>

#include <string.h>

using namespace std;


int main( )

{

char str[20],temp[20];

strcpy(str,"@Learncpp");

strcpy(temp,str);

strcat(str,temp);

puts(str);

return 0;

}


Output :
@Learncpp@Learncpp

این همان مسئله ای است که گفته شد که چطور یک رشته را به انتها خودش اضافه کنیم .
- فراموش نکنیم کار strcpy این است که یک رشته را در یک رشته دیگر کپی می کند.

🔰ترجمه شده از سایت
www.cplusplus.com

@Learncpp
#cstring #string.h #strncat
🔵رشته ها (string)

🔹تابع strncat
char *strncat(char *destination,const char *source, size_t num);

این تابع به اندازه ی num کاراکتر را از source به آخر destination اضافه می کند و اگر تعداد کل کاراکترهای source از num کمتر باشد
مثلا اگر source به تعداد 5 کاراکتر داشته باشد ولی num دارای 8 کاراکتر باشد تابع، باقی مانده آن را با null پر می کند.
در مثالی که زدیم num سه کاراکتر از source بیشتر است پس 3 کاراکتر آخر destination را با null پر می کند.


🔹پارامتر ها:

🔻مفهوم destination :
یک اشاره گر به رشته ای که قرار است بزرگتر شود یا همان رشته ای که قرار است یک رشته ی دیگر به آخر آن اضافه شود.

🔻مفهوم source :
این همان رشته ای است که قرار است یک قسمت از آن به آخر destination اضافه شود.

🔻مفهوم num :
این پارامتر یعنی به تعداد num کاراکتر از source به آخر destination اضافه شود.

🔹مقادیر بازگشتی :
کل destination را بر می گرداند.

مثال)
#include <iostream>

#include <string.h>

using namespace std;


int main ( )

{

char str1[20];

char str2[20];

strcpy(str1,"To be ");

strcpy(str2,"or not to be");

strncat(str1, str2, 6);

puts(str1);

return 0;

}


Output:
To be or not

🔰ترجمه شده از سایت
www.cplusplus.com

@Learncpp
#cstring #string.h #strcmp
🔵رشته ها (string)

🔹تابع strcmp
int strcmp(const char *str1,const char *str2);

این تابع شروع به مقایسه ی کاراکتر های هر دو رشته از ابتدای آنها می کند تا به اولین مورد اختلاف برسد
اگر کاراکتر مربوط به str1 بزرگتر از کاراکتر مربوط به str2 باشد، مقداری مثبت یعنی عدد 1 را برمی گرداند این بدان مفهوم است که str1>str2.
هم چنین به عکس اگر کاراکتر مربوط به str1 کوچکتر از کاراکتر مربوط به str2 باشد، مقداری منفی یعنی عدد 1- را به مفهوم اینکه str1<str2 است، بر می گرداند.
اگر دو رشته با هم مساوی باشند، مقدار 0 را بر می گرداند.

مثال)
#include <iostream>
#include <string.h>
using namespace std;

int main ( )
{
char key[ ] = "apple";
char buffer[80];
do {
cout<<"Guess my favorite fruit? ";
Cout<<flush;
Cin>>buffer;
} while (strcmp (key,buffer) != 0);
Cout<<"Correct answer!";
return 0;
}


output
Guess my favourite fruit? orange
Guess my favourite fruit? apple
Correct answer!

🔰ترجمه شده از سایت
www.cplusplus.com

@Learncpp
#cstring #string.h #strncmp
🔵رشته ها (string)

🔹تابع strncmp
int strncmp(const char *str1,const char *str2,size_t num);

این تابع به طول num کاراکتر از رشته str1 را با رشته str2 مقایسه می کند.
چناچه Str1=Str2 باشد،تابع مقدار صفر را بر می گرداند و چنانچه
num>=max{strlen(str1),strlen(str2)}
باشد، مانند strcmp عمل می کند یعنی بیش از طول دو رشته که حافظه غیر مجاز می باشد را بررسی نمی کند.

مثال)
#include <iostream>
#include <string.h>
using namespace std;

int main ( )
{
char str[ ][5] = {"R2D2" , "C3PO" , "R2A6"};
int n;
Cout<<"Looking for R2 astromech droids...";
for (n=0 ; n<3 ; n++)
if (strncmp (str[n] , "R2xx" , 2) == 0)
{
cout<<"found \n"<<str[n];
}
return 0;
}


Output:
Looking for R2 astromech droids...
found R2D2
found R2A6

🔰ترجمه شده از سایت
www.cplusplus.com

@Learncpp
#cstring #string.h #memchr
🔵رشته ها (string)

🔹تابع memchr

const void *memchr ( const void *ptr, int value, size_t num);

void *memchr ( void *ptr, int value, size_t num);

این تابع داخل یک قسمت از حافظه به دنبال یک کاراکتر خاص می گردد.
نحوه کار این تابع به این صورت است که از prt به اندازه num بایت جلو می رود و به دنبال value می گردد و یک اشاره گر به موقعیت اولین کاراکتر مشابه برمی گرداند.
مثلا اگر داخل آن بلاک حافظه ما سه تا a باشد آن موقعیت اولی را بر می گرداند و اگر هیچ کاراکتری پیدا نشود مقدار NULL را برمی گرداند،
درضمن اشاره گری از نوع unsingned char برمی گرداند یعنی جایی که کاراکتر داخلش ذخیره شده است جایی از نوع unsigned char است و ما باید آن را داخل یک متغیر از همین نوع بریزیم، این تابع هر دو مقدار value و کاراکترهای آن آرایه ای را که به آن می دهیم را از نوع unsigned char محسوب می کند پس بهتر است آن آرایه ای که ما برای آن می فرستیم از همین نوع باشد تا کاملا با این تابع همخوانی داشته باشد.

🔹پارامتر ها:

🔻مفهوم ptr :
یک اشاره گر به ابتدای آن قسمت از حافظه است که جستجو انجام می شود.

🔻مفهوم value :
کاراکتری است که ما به دنبال آن می گردیم.
شاید بپرسید چرا int ؟
وقتی می خواهیم یک کاراکتر به یک تابع بدهیم یا باید کد اسکی آن را به تابع بدهیم یا خود کاراکتر را.
به این مثال دقت کنید :
int a = 'A';
int b = 65;
این دو متغیر هستند، داخل متغیر a کاراکتر A و در متغیر b مقدار 65 ذخیره شده است و چون یک کاراکتر را داخل یک مقدار int می ریزیم کد اسکی آن داخلش ریخته می شود بر عکس اگر ما یک int را داخل یک متغیر از نوع char بریزیم بازهم مقدار اسکی آن ریخته می شود ولی به عنوان یک کاراکتر آن را می شناسیم.

🔻مفهوم num :
و اما این متغیر که ما باید ترکیبی از آن استفاده کنیم. دراین تابع در اصل ما باید اول و آخر آن بلاک حافظه یا آرایه ای را که می خواهیم جستجو کنیم را بدهیم یعنی اگر بلاک حافظه ما 20 خانه می گیرد ما باید آدرس اولین و آخرین خانه آن را به تابع بدهیم که آدرس اولین خانه آن همان ptr است.
حالا شاید لازم نداشته باشیم که اول تا آخر بلاک حافظه مان را جستجو کنیم پس می توانیم هر مقدار که خواستیم جستجو کنیم که برای این کارهم باید آدرس اولین موقعیت آن قسمت از بلاکی را که می خواهیم جستجو کنیم به آن بدهیم و همچنین آدرس آخر آن بلاک را.

تفاوت این تابع در C با ++C این است که در C فقط شکل اول قابل استفاده است ولی در ++C دو تابع برای آن آورلود شده است.

ادامه در پست بعدی ...

🔰ترجمه شده از سایت
www.cplusplus.com

@Learncpp
#cstring #string.h #memchr
🔵رشته ها (string)

توضیحات قبل در پست
https://t.me/Learncpp/856

🔹تابع memchr
1. #include <iostream>

2. #include <string.h>

3. using namespace std;


4. int main( )

5. {

6. char *pch;

7. char str[ ]="Exampel string";

8. pch=(char *)memchr(str,'p',strlen(str));

9. if(pch == NULL)

10.cout<<"'p' not found.\n";

11.else

12.cout<<"'p' found at position \n"<<pch-str+1;

13.return 0;

14.}


output :
'p' found at position 5

در خط 6 یک اشاره گر تعریف شده برای اینکه آدرس کاراکتری را که به دنبال آن می گردیم داخل خودش بریزد.
در خط 7 یک رشته از کاراکترها را به صورت آرایه تعریف می کند و همانطور که می دانید اسم آرایه اگر خودش تنها باشد به آدرس اولین کاراکتر آرایه اشاره می کند مثلا داخل این برنامه اگر جایی از برنامه از str خالی استفاده کنیم یعنی داریم به ابتدای آرایه اشاره می کنیم.
سپس str و 'p' و طول str را به تابع می دهد و مقدار بازگشتی اش که یک اشاره گر است را در pch می ریزد. در این برنامه تابع streln( ) طول یک رشته را برای ما بر می گرداند.حالا چرا طول آرایه ؟ چون ما می خواهیم تا آخر رشته را جستجو کنیم و آخر رشته یعنی از اول رشته به اندازه ی طول رشته جلو برویم، اگر از اول رشته به اندازه طول رشته جلو برویم دقیقا به آخر رشته می رسیم پس داریم از اول تا آخر رشته به دنبال کاراکتر 'p' می گردیم،سپس چک می کند pch مساوی NULL است یا نه اگر NULL باشد که یعنی داخل رشته هیچ کاراکتر 'p' وجود ندارد ولی اگر مساوی NULL نباشد یعنی اینکه آدرس جایی که 'p' ذخیره شده داخل pch ریخته شده است، حالا ما چطور باید موقعیت 'p' را داخل str پیدا کنیم ؟
توضیح داده شد که اسم آرایه به تنهایی به اولین کاراکتر داخل آرایه اشاره می کند و این را هم می دانیم که تمام عناصر آرایه پشت سر هم ذخیره می شوند. اگر فرض کنیم که رشته ی ما از آدرس 100 حافظه شروع شده باشد پس آخرین کاراکتر رشته داخل آدرس 100 + strlen(str) ذخیره خواهد شد
یعنی :
100 E 0
101 x 1
102 a 2
103 m 3
104 p 4
105 l 5
106 e 6
107 space 7
108 s 8
109 t 9
110 r 10
111 i 11
112 n 12
113 g 13
114 \n 14

حالا اگر بخواهیم موقعیت 'p' را به دست آوریم کافی است آدرس 'p' را از str کم کنیم یعنی صد و چهار منهای صد می کنیم که پاسخ 4 میشود چرا ؟؟؟
چون اندیس اولین خانه ی آرایه از صفر شروع می شود و 4 شماره ی اندیس آرایه مان است پس اگر با یک آن را جمع کنیم موقعیت حقیقی کاراکتر پیدا می شود.

🔰ترجمه شده از سایت
www.cplusplus.com

@Learncpp
#cstring #string.h #strchr
🔵رشته ها (string)

🔹تابع strchr
const char *strchr(const char *str,int character);

char *strchr(char *str,int character);

این تابع مانند تابع memchr عمل می کند ولی این تابع از جایی که ما تعیین می کنیم تا آخر آرایه را جستجو می کند.

🔹پارامتر ها:

🔻مفهوم str :
رشته یا آرایه ای که می خواهیم جستجو کنیم.

🔻مفهوم character :
کاراکتری که می خواهیم به دنبال آن بگردیم.

مثال)
#include <iostream>

#include <string.h>

using namespace std;



int main ( )

{

char str[ ] = "This is a sample string";

char *pch;

cout<<"Looking for the 's' character in "<<str<<endl;

pch=strchr(str,'s');

while (pch!=NULL)

{

cout<<"found at \n"<<pch-str+1;

pch=strchr(pch+1,'s');

}

return 0;

}


Output:
Looking for the 's' character in "This is a sample string"...
found at 4
found at 7
found at 11
found at 18

🔰ترجمه شده از سایت
www.cplusplus.com

@Learncpp
#cstring #string.h #strcspn
🔵رشته ها (string)

🔹تابع strcspn
size_t strcspn(const char *str1,const char *str2);

در توابع memchr و strchr به دنبال یک کاراکتر داخل یک رشته می گشتیم حالا با این تابع به دنبال یک دسته از کاراکترها داخل یک رشته می گردیم یعنی اگر هر کدام از کاراکترهای رشته ی دوم داخل رشته ی اول باشد تابع موقعیت آن کاراکتر را داخل رشته ی اول برمی گرداند و اگر هیچ کاراکتری پیدا نشود طول رشته ی اول را برمی گرداند.
در واقع این تابع به دنبال تک تک کاراکتر های رشته ی دوم داخل رشته اول می گردد و اگر کاراکتری از رشته ی دوم را در رشته ی اول پیدا کرد موقعیت آن کاراکتر را در رشته ی اول برمی گرداند.

🔹پارامتر ها:

🔻مفهوم str1 :
این همان رشته ای است که می خواهیم عملیات جستجو را انجام دهیم.

🔻مفهوم str2 :
این رشته یا دسته ای از کاراکترهایی است که می خواهیم داخل رشته ی اول آن ها را جستجو کنیم.

مثال)
1. #include <iostream>
2. #include <string.h>
3. using namespace std;

4. int main ( )
5. {
6. char str[ ]="fcba73";
7. char keys[ ]="1234567890";
8. int i;
9. i=strcspn(str,keys);
10. cout<<"The first number in str is at position \n"<<i+1;
11. return 0;
12. }


Output:
The first number in str is at position 5

در خط 6 یک رشته در قالب یک آرایه تعریف می شود و همانطور که می دانید اسم آرایه به تنهایی شامل یه اشاره گر به ابتدای آرایه است.
در خط 7 باز رشته ی دیگری تعریف می شود.
درخط 9 به اینصورت است که str و keys را به تابع می دهیم بعد ازآن هم مقدار i+1 رو چاپ می کنیم.
چرا خروجی 5 میشود؟؟
شما فرض کنید رشته اولیه از آدرس 100 و رشته دوم از آدرس 200 شروع می شود.

100 f 200 1
101 c 201 2
102 b 202 3
103 a 203 4
105 7 204 5
106 3 205 6
206 7
207 8
208 9
209 0
حالا اگر دقت کنید اولین کاراکتری که داخل str است و داخل keys هم هست کاراکتر 7 است یعنی اولین کاراکتر مشترک داخل دو تا رشته کاراکتر 7 است پس موقعیت آن را داخل رشته ی اول که برابر با 4 است را برمی گرداند اما همانطور که می دانیم عدد چهار اندیس عنصری از آرایه است که داخل آن کاراکتر 7 ذخیره شده پس موقعیت حقیقی آن 5 می شود.

🔰ترجمه شده از سایت
www.cplusplus.com

@Learncpp
#cstring #string.h #strpbrk
🔵رشته ها (string)

🔹تابع strpbrk
const char *strpbrk(const char *str1,const char *str2);

char *strpbrk(char *str1,const char *str2);

این تابع در نگاه اول کمی گیج کننده و یک تابع کم کاربرد به نظر می رسد, این تابع اولین کاراکتر از رشته ی اول را با تمام کاراکتر های رشته ی دوم چک می کند اگر پیدا شد که آدرس آن کاراکتر را برمی گرداند اگر نبود دومین کاراکتر از رشته ی اول را با تمام کاراکترهای رشته ی دوم مقایسه می کند درصورت پیدا شدن آدرسش را برمی گرداند
اگر نشد همین گونه تا آخر ادامه پیدا می کند تا به آخر رشته ی اول برسد یا به عبارت ساده تر اولین کاراکتر مشترک بین رشته ی اول و رشته ی دوم را برمی گرداند.

🔹پارامتر ها:

🔻مفهوم str1 :
رشته ای است که می خواهیم داخل مجموعه ای از کاراکترها به دنبال آن بگردیم.

🔻مفهوم str2 :
رشته ای است که در رشته اول به دنبالش می گردیم.

🔹مقادیر بازگشتی :
اگر در رشته ی اول کاراکتری مشابه هر کدام از کاراکترهای رشته ی دوم پیدا کند آدرسش را بر می گرداند اگر پیدا نشد که مقدار 0 یا همان NULL را بر می گرداند.

#include <iostream>
#include <string.h>
using namespace std;

int main ( )
{
char str[ ]="adfgjkls";
char keys[ ]="qwertyhzxcvbnm";
char *i;
i=strpbrk(str,keys);
if(i!=NULL)
cout<<*i<<endl;
else
cout<<"not found"<<endl;
return 0;
}


Output :
Not found

برنامه بالا اولین کاراکتر از رشته ی اول که a هست را با تک تک کاراکتر های رشته ی دوم چک می کند و همان طور که می بینید کاراکتر a در رشته ی دوم وجود ندارد پس سراغ کاراکتر دوم از رشته ی اول که d هست می رود و باز هم می بینید که کاراکتر d در رشته ی دوم وجود ندارد پس به سراغ کاراکتر سوم می رود و تا آخر همین گونه ادامه می یابد.
چون هیچ کاراکتر مشترکی بین این دو تابع وجود ندارد مقدار NULL یا همان 0 برگردانده می شود.

مثال)
#include <iostream>
#include <string.h>
using namespace std;

int main ( )
{
char str[ ]="adrfgjxkls";
char keys[ ]="qwertyhzxcvbnm";
char *i;
i=strpbrk(str,keys);
if(i!=0)
cout<<*i<<endl;
else
cout<<"not found"<<endl;
return 0;
}


Output :
r
خوب چرا r ؟؟؟ r اولین کاراکتر مشترک بین رشته ی اول و رشته ی دومی است.

🔰ترجمه شده از سایت
www.cplusplus.com

@Learncpp
#cstring #string.h #strrchr
🔵رشته ها (string)

🔹تابع strrchr
const char *strrchr(const char *str,int character);

char *strrchr(char *str,int character);

این تابع مانند تابع strchr عمل می کند با این تفاوت که آخرین کاراکتر مشابه character در آرایه ی str را برمی گرداند(البته می دانید که یک اشاره گر بر می گرداند)

🔹پارامتر ها:

🔻مفهوم str :
این همان آرایه یا رشته ای است که می خواهیم داخلش جستجو کنیم.

🔻مفهوم character :
این همان کاراکتری است که به دنبال آن می گردیم.

🔹مقادیر برگشتی :
اگر این تابع بتواند کاراکتر ما را پیدا کند که آدرس آن را برمی گرداند اما اگر نتواند کاراکتری پیدا کند مقدار NULL را برمی گرداند.

مثال)
#include <iostream>
#include <string.h>
using namespace std;

int main ( )
{
char str[ ]="This is a sample string";
char *pch;
pch=strrchr(str,'s');
cout<<"Last occurence of 's' found at \n"<<pch-str+1;
return 0;
}


Output:
Last occurence of 's' found at 18

🔰ترجمه شده از سایت
www.cplusplus.com

@Learncpp
#cstring #string.h #strlen
🔵رشته ها (string)

🔹تابع strlen
size_t strlen(const char *str);


پارامتر str رشته است و خروجی آن یعنی size_t یک تایپ صحیح بدون علامت می باشد که بسته به نیاز می توان آن را به صورت short یا long تعریف کرد
نحوه عملکرد این تابع نیز به این صورت می باشد که این تابع تعداد کاراکتر ها را از ابتدا مکانی که اشاره گر str به آن اشاره می کند می شمارد تا به کاراکتر '0\' برسد. دقت کنید که خود '0\' شمرده نمی شود بنابراین رشته " " یک رشته تهی محسوب شده و طول آن صفر در نظر گرفته می شود. همچنین دقت کنید که رشته "Ali" با آرایه 'A' , 'l' , 'i' متفاوت می باشد چرا که رشته "Ali" در اصل برابر است با آرایه 'A' , 'l' , 'i' , '\0' .

مثال)
#include <iostream>

#include <string.h>

using namespace std;


int main ( )

{

char szInput[256];

cout<<"Enter a sentence:";

gets(szInput);

cout<<"The sentence entered is "<<(unsigned)strlen(szInput)<<"characters long.\n";

return 0;

}


output :
Enter sentence: just testing
The sentence entered is 12 characters long.

🔰ترجمه شده از سایت
www.cplusplus.com

@Learncpp
زحمت ترجمه کتابخانه "cstdio"را آقای حسن مراد نژاد کشیدن از ایشون بخاطر کمکشون
سپاسگزاریم🙏🌺
@Learncpp