Telegram Web Link
#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://www.tg-me.com/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
#vector

📚فهرست آموزش کتابخانه vector(وکتورها)

♦️وکتورچیست
#vector
www.tg-me.com/Learncpp/550

♦️توضیحات بیشتر درباره وکتور
www.tg-me.com/Learncpp/551

#pop_back
www.tg-me.com/Learncpp/552

#push_back
www.tg-me.com/Learncpp/553

#insert
1. www.tg-me.com/Learncpp/556
2. www.tg-me.com/Learncpp/557

#erase
www.tg-me.com/Learncpp/558

#capacity
www.tg-me.com/Learncpp/559

#clear
www.tg-me.com/Learncpp/560

#size
www.tg-me.com/Learncpp/563

#reserve
www.tg-me.com/Learncpp/563

#resize
www.tg-me.com/Learncpp/567

#max_size
www.tg-me.com/Learncpp/572

#at
www.tg-me.com/Learncpp/573

#operator
www.tg-me.com/Learncpp/576

#Empty
www.tg-me.com/Learncpp/582

#iterator
www.tg-me.com/Learncpp/584

#Begin
www.tg-me.com/Learncpp/588

#cbegin
www.tg-me.com/Learncpp/589

#Rbegin
www.tg-me.com/Learncpp/590

#crbegin
www.tg-me.com/Learncpp/591

#End
www.tg-me.com/Learncpp/595

#cend
www.tg-me.com/Learncpp/596

#Rend
www.tg-me.com/Learncpp/597

#crend
www.tg-me.com/Learncpp/612

#Back
www.tg-me.com/Learncpp/601

#Emplace
www.tg-me.com/Learncpp/606

#Emplace_back
www.tg-me.com/Learncpp/607

#operator
www.tg-me.com/Learncpp/611

#Front
www.tg-me.com/Learncpp/613

#swap
1. www.tg-me.com/Learncpp/616
2. www.tg-me.com/Learncpp/617

#data
www.tg-me.com/Learncpp/621

#shrink_to_fit
www.tg-me.com/Learncpp/625

#vector::vector
1. www.tg-me.com/Learncpp/632
2. www.tg-me.com/Learncpp/633
3. www.tg-me.com/Learncpp/634

#assing
www.tg-me.com/Learncpp/641

#relation_operator
www.tg-me.com/Learncpp/652

📝ترجمه کتابخانه از سایت رسمی برنامه نویسان ++C
www.cplusplus.com

🔸کمک به بچه های سرطانی
💝@tabligh_cpp

🔹آموزش تخصصی ++C
🛡@Learncpp
زحمت ترجمه کتابخانه "cstdio"را آقای حسن مراد نژاد کشیدن از ایشون بخاطر کمکشون
سپاسگزاریم🙏🌺
@Learncpp
🔸ترجمه کتابخانه "عملیات ورودی/خروجی (cstdio)" از سایت رسمی برنامه نویسان ++C به آدرس
www.cplusplus.com/reference

@Learncpp
#cstdio #cstdio.h
🔵عملیات ورودی/خروجی(cstdio)

🔴کتابخانه cstdio

می توان با استفاده از کتابخانه های ورودی و خروجی استاندارد [c standard input and output (cstdio)] سی پلاس پلاس که حاوی مجموعه ای از امکانات ورودی/خروجی است؛ عملیات های ورودی و خروجی را انجام داد.
این کتابخانه از جریان هایی برای برقراری ارتباط با دستگاه های فیزیکی(مانند صفحه کلید، راه انداز دیسک، پرینتر، ارتباط شبکه ای، صفحه نمایش و ...) استفاده می کند.

🔹جریان ها(Stream) :
در زبان++C ورودی و خروجی در جریان هایی از بایت ها اتفاق می افتد.
جریان تنها دنباله ای از بایت ها است. در عملیات ورودی، بایت ها از یک دستگاه به طرف حافظه اصلی جریان پیدا می کنند.
در عملیات خروجی، بایت ها از حافظه ی اصلی به طرف یک دستگاه جریان می یابند.
جریان ها در کتابخانه stdio به وسیله اشاره گرهایی به فایل ها(شی هایی شامل اطلاعات برای کنترل جریان )به کار گرفته می شود.
یک اشاره گر به فایل، جریان منحصر به فردی است که به عنوان یک پارامتر در عملیات مربوط به آن جریان استفاده می شود.

🔹سه جریان استاندارد وجود دارد :
🔻stdin(standard input stream)
🔻stdout(standard output stream)
🔻stderr(standard error stream)
که به طور خودکار برای برنامه هایی که از کتابخانه ها استفاده می کنند ساخته و باز می شود.

🔹مشخصات جریان
جریان ها دارای خواصی هستند که نشان می دهد کدام توابع می تواند در آنها استفاده شود و چگونه این خواص در داده های ورودی و یا خروجی تاثیر می گذارند.

🔹توابع عملیات بر روی فایل
🔻remove(remove file)
🔻rename(rename file)
🔻tmpfile(open a temporary file)
🔻tmpnam(generate temporary filename)

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

@Learncpp
#cstdio #cstdio.h #remove
🔵عملیات ورودی/خروجی(cstdio)

🔹تابع remove

int remove(const char *filename);

حذف کردن فایلی که اسمش در مشخصه file name مشخص شده است.
این عملیات به طور مستقیم بر روی فایلی که با نام مشخص شده انجام می شود.

🔹پارامتر ها :

🔻مفهوم File name :
با این مشخصه می توان فایل را مشخص کرد، برای این کار تنها می بایست نام فایل اصلی به صورت string به برنامه داده شود.
string filename="myfile.txt";

همچنین می توانیم اسم فایل را به صورت آدرس (موجود باشد) به برنامه بدهیم.
string filename="E:\\New folder\\myfile.txt";


🔹مقدار برگشتی :
اگر برنامه قادر به حذف کردن فایل شد، مقدار 0 را برمی گرداند و اگر نتوانست فایل را پاک کند، مقدار 1 را برمی گرداند.

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

int main( )
{
if (remove("myfile.txt") != 0)
perror("Error delting file");
else
puts("file successfully deleted");
return 0;
}


در شرط اول تابع remove صدا زده شده و اگر نامساوی صفر باشد ( یعنی قادر به پاک کردن فایل نباشد ) دستور زیر شرط اجرا می شود و خروجی برنامه
Error deleting file: no such file or directory
خواهد بود، در غیر اینصورت else و دستور زیر آن اجرا میشود و خروجی برنامه
file successfully deleted
خواهد بود.

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

@Learncpp
#cstdio #cstdio.h #rename
🔵عملیات ورودی/خروجی(cstdio)

🔹تابع rename

int rename(const char *oldname,const char *newname);

این تابع قادر به تغییر نام فایل از نام قدیمی به نام جدید است.
این کار به طور مستقیم روی فایل انجام می شود و از هیچ جریانی استفاده نمی شود.
در صورتی که از این تابع استفاده می شود که نام جدید و نام قدیمی دو موقعیت متفاوت داشته باشند( در صورتی که هر دو موقعیت وجود داشته باشد ) فایل به موقعیت جدید انتقال پیدا می کند.
همچنین اگر نام جدید، نام فایل موجودی باشد یا تابع با شکست روبرو می شود و یا فایل جدید را جایگزین فایل قدیمی می کند(بسته به سیستم مورد استفاده و کتابخانه اجرا شده)

🔹پارامتر ها:

🔻مفهوم old name :
نام یا آدرس فایلی که موجود است می باشد (به صورت string)

🔻مفهوم new name :
نام یا آدرس جدید فایل

🔹مقدار برگشتی :
اگر برنامه موفق به تغییر فایل شد ، مقدار 0 را برمی گرداند در غیر اینصورت عدد غیر صفر را برمی گرداند.

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

int main ( )
{
int result;
char oldname[ ]="oldname.txt";
char newname[ ]="newname.txt";
result=rename(oldname,newname);
if(result==0)
puts("File successfully renamed");
else
perror("Error renaming file");
return 0;
}


متغیر result تعریف و برابر با مقدار برگشتی تابع rename می باشد
اگر مقدار برابر صفر شد( همان طور که گفته شد، به معنای آن است که تابع به درستی اجرا شده) خروجی برنامه به صورت زیر خواهد بود

File successfully renamed
و در غیر اینصورت خروجی به صورت زیر است

Error renaming file: Permission denied

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

@Learncpp
#cstdio #cstdio.h #tmpfile
🔵عملیات ورودی/خروجی(cstdio)

🔹تابع tmpfile

FILE *tmpfile(void);

ایجاد و باز کردن فایلی موقت با یک نام منحصر به فرد که به صورت خودکار انتخاب می شود.
در صورت استفاده از این تابع، یک فایل باینری درست می شود [با سطح دسترسی "wb+" ( ساختن فایل با قابلیت خواندن و نوشتن )]
فایل موقتی که ساخته شده، بعد از بسته شدن استریم(جریان) یا زمانی که برنامه خاتمه پیدا می کند، به صورت خودکار حذف می شود اگر برنامه به صورت غیر طبیعی خاتمه پیدا کند، این که فایل حذف شود یا خیر، بستگی به سیستم و کتابخانه های مورد استفاده دارد.

🔹مقدار برگشتی :
در صورت اجرای کامل و موفق تابع، یک اشاره گر به فایل موقتی که ساخته شده برمی گرداند و در صورت اجرای ناقص NULL را برمی گرداند.

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

int main( )
{
char buffer[256];
FILE *pFile;
pFile=tmpfile( );
do {
if(!fgets(buffer,256,stdin))
break;
fputs(buffer,pFile);
} while(strlen(buffer)>1);

rewind(pFile);

while(!feof(pFile))
{
if(fgets(buffer,256,pFile)==NULL)
break;
fputs(buffer,stdout);
}

fclose(pFile);
return 0;
}


این برنامه، یک فایل موقت ساخته تا خط هایی که توسط کابر وارد می شود در آن ذخیره شود برنامه فایل های موقت را برگردانده و محتویات آن را به صورت استاندارد چاپ می کند.

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

@Learncpp
#cstdio #cstdio.h #tmpnam
🔵عملیات ورودی/خروجی(cstdio)

🔹تابع tmpnam

char *tmpnam(char *str);

برگرداندن یک رشته که حاوی اسمی است که با اسم های فایل های موجود متفاوت است، بنابراین برنامه نویس می تواند با خیال راحت از تکراری نبودن اسم فایل، فایل موقت خود را بسازد
اگر رشته ارسالی به عنوان آرگومان، خالی (NUll) باشد رشته حاصل در یک آرایه استاتیک داخلی ذخیره می شود که می تواند با مقدار برگشتی در دسترس قرار بگیرد.
محتوای این رشته حفظ می شود، حداقل تا زمانی که تابع tmpnam صدا زده شود، که ممکن است جایگزین این مقدار ذخیره شده شود.
اگر رشته ارسالی به عنوان آرگومان، خالی نباشد (not a null)،
آن را در آرایه ای که حداقل L_tmpnamکاراکتر دارد با نام های پیشنهاد شده برای فایل های موقت ذخیره می کند.

🔹پارامتر ها :

🔻مفهوم str :
اشاره گری به یک آرایه است که نام های پیشنهادی فایل های موقت به عنوان یک رشته ذخیره شده اند؛
سایز پیشنهادی این آرایه حداقل L_temnam کاراکتر دارد.

🔹مقدار برگشتی :
در صورت اجرا شدن، یک اشاره گر به رشته که شامل یک نام پیشنهادی برای یک فایل موقت است :

🔻اگر مقدار آرگومان خالی باشد؛ به یک بافر خالی اشاره می کند (محتوایی که حداقل تا صدا زدن دوباره تابع حفظ میشود)

🔻اگر مقدار آرگومان خالی نباشد؛ رشته ای که به عنوان آرگومان فرستاده شده برگشت داده می شود (return)

مثال :

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

int main( )
{
char buffer[L_tmpnam];
char *pointer;
tmpnam(buffer);
cout<<"Tempname #1: \n"<<buffer;
pointer=tmpnam(NULL);
cout<<"Tempname #2: \n"<<pointer;
return 0;
}


این برنامه دو نام متفاوت برای فایل های موقت ایجاد می کند هر یک از آنها توسط یکی از دو روش که در tmpnam می تواند استفاده شود، ایجاد شده است.

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

@Learncpp
🔸ترجمه کتابخانه "time (زمان)" از سایت رسمی برنامه نویسان ++C به آدرس
www.cplusplus.com/reference

@Learncpp
#ctime #time.h #mktime
🔵زمان (time)

🔹تابع mktime

time_t mktime(struct tm *timeptr);

این دقیقا برعکس تابع localtime است، ما به این تابع یک زمان استاندارد می دهیم و این تابع می گوید که این زمان از چند ثانیه تشکیل شده است.

🔹پارامتر ها :

🔻مفهوم timeptr* :
یک اشاره گر به زمان استانداردی که از نوع struct tm است.

🔹مقادیر بازگشتی :
اگر تابع بتواند کارش را درست انجام بدهد یک مقدار از نوع time_t بر می گرداند و اگر نتواند مقدار منفی یک(1-) را بر می گرداند.
#include <iostream>
#include <ctime>
using namespace std;

int main ( )
{
time_t tim;
tm *stim;

time(&tim);
stim = localtime(&tim);

tim=mktime(stim);
cout<<tim<<endl;
return 0;
}

در مثال بالا ابتدا زمان غیر استاندارد سیستم را می گیریم سپس آن را به زمان استاندارد تبدیل می کنیم سپس دوباره آن را به زمان غیر استاندارد تبدیل می کنیم.

#include <iostream>
#include <time.h>
/*time_t,struct tm,time,mktime*/
using namespace std;

int main ( )
{
time_t rawtime;
struct tm *timeinfo;
int year,month,day;
const char *weekday[ ]={"Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"};

/* prompt user for date */
cout<<"Enter year: ";
fflush(stdout);
cin>>year;
cout<<"Enter month: ";
fflush(stdout);
cin>>month;
cout<<"Enter day: ";
fflush(stdout);
cin>>&day;

/*get current timeinfo and modify it to the user's choice*/
time(&rawtime);
timeinfo=localtime(&rawtime);
timeinfo->tm_year=year-1900;
timeinfo->tm_mon=month-1;
timeinfo->tm_mday=day;

/*call mktime: timeinfo->tm_wday will be set*/
mktime(timeinfo);

cout<<"That day is a \n"<<weekday[timeinfo->tm_wday];

return 0;
}


Output:
Enter year: 2000
Enter month: 5
Enter day: 20
That day is a Saturday.

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

@Learncpp
2025/07/01 00:16:13
Back to Top
HTML Embed Code: