Learning ©➕➕
4.52K subscribers
81 photos
2 videos
38 files
182 links
ک
Download Telegram
#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
🔸ترجمه کتابخانه "عملیات ورودی/خروجی (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
#ctime #time.h #time
🔵زمان (time)

🔹تابع time

time_t time (time_t* timer);

این تابع زمان فعلی سیستم را داخل متغیری که ما مشخص می کنیم قرار می دهد ولی این تابع زمان را بر حسب ثانیه بر می گرداند.
یعنی مثلا اگر زمان فعلی سیستم 00:02:34 باشد این تابع مقدار 153 را بر می گرداند به این دلیل که زمان دو دقیقه و سی و چهار ثانیه از 153 ثانیه تشکیل شده است.
حال باید با استفاده از تابع localtime و یک متغیر دیگر(که یک struct از نوع tm هست) به زمان استاندارد آن را تبدیل کنیم.

🔹پارامتر ها :

🔻مفهوم timer* :
این همان اشاره گر ازنوع time_t هست که می خواهیم زمان را داخل آن نگه داریم.

🔹مقادیر بازگشتی :
اگر تابع بتواند زمان را بگیرد تعداد ثانیه هایش را بر می گرداند ولی اگر نتواند مقدار منفی یک (1-) را بر می گرداند.

#include <iostream>
#include <ctime>
using namespace std;

int main( )
{
Time_t tim;
Time(&tim);
cout<<tim<<endl;
}


Output :
1742940573

این برنامه ابتدا یک متغیر از نوع time_t تعریف می کند بعد آدرس آن را (منظور یک اشاره گر به جایی که tim داخلش ذخیره شده) به تابع time می دهد.
این تابع هم زمان را بر حسب ثانیه داخل جایی که tim اشاره می کند قرار می دهد سپس آن نمایش می دهد.

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

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

🔹تابع clock
clock_t clock(void);

آیا دوست دارید بدانید برنامه تان چند ثانیه برای اجرا زمان گرفته است ؟؟؟
این تابع به این صورت کار می کند که زمان سپری شده توسط CPU که برای برنامه ی شما مصرف شده را بر می گرداند ولی مقداری که این تابع بر می گرداند بر حسب clock_t هست.

🔹مقادیر بازگشتی :
تابع اگر بتواند زمان را محاسبه کند یک عدد در قالب clock برای ما می فرستد اگر نتواند مقدار منفی یک (1-) را بر می گرداند.

⚠️ ممکن است شما یک برنامه را روی چند تا کامپیوتر تست کنید اگر جواب های مختلف گرفتید تعجب نکنید چون ممکن است سرعت پردازنده ها با هم فرق کند یا اگر روی دو کامپیوتر کاملا مشابه در دو محیط مختلف تست کردید و جواب متفاوتی دیدید ممکن است شرایط محیطی روی کار پردازنده تاثیر گذاشته باشد...

1. #include <iostream>
2. #include <ctime>
3. using namespace std;

4. int main( )
5. {
6. clock clk;
7. for(int i=0;i<=9999;i++)
8. {
9. cout<<i<<endl;
10. }
11. clk=clock( );
12. cout<<clk<<endl;
13. return 0;
14. }


Output :
1001

در خط 8 حلقه اعداد 0 تا 9999 را چاپ می کند تا زمانی تلف شود.
در خط 12 زمان را داخل متغیر clk قرار می دهیم و سپس آن چاپ می کنیم.
اما همان طور که می بینید یک عدد بر می گرداند که امکان ندارد زمان برنامه باشد یعنی یک حلقه ی کوچک 1001 ثانیه طول می کشد ؟؟؟
خوب پس چطوری به یک عدد معقول تبدیلش کنیم ؟؟؟
برای این کار باید clk را به یک عدد float تبدیل کنیم بعد بر ثابت CLOCKS_PER_SEC تقسیمش کنیم.

برای درک بهتر به مثال پایین توجه کنید:
cout<<((float)clk)/ CLOCKS_PER_SEC<<endl;

1. #include <iostream>
2. #include <ctime>
3. using namespace std;

4. int main( )
5. {
6. clock clk;
7. for(int i=0; i<=999; i++)
8. {
9.// دستورات
10. }
11. clk=clock( );
12. for(int j=0;j<=99999;j++)
13. {
14.// دستورات
15. }
16. clk=clock( )–clk;
17. cout<<((float)clk)/CLOCKS_PER_SEC<<endl;
18. return 0;
19. }


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

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

🔹تابع difftime

double difftime(time_t end,time_t beginning);

این تابع اختلاف دو زمان را که به صورت زمان غیر استاندارد(یا همان time_t است)را محاسبه می کند.
البته درست این است که این تابع فقط نوع time_t که همان ثانیه ها هست را محاسبه می کند ولی می توانیم کاری کنیم که حتی اختلاف ماه و سال و روز را هم محاسبه کنیم.


🔹پارامتر ها :

🔻مفهوم end :
این همان زمان اولیه است که می خواهیم اختلافش تا زمان ثانویه را محاسبه کنیم.

🔻مفهوم beginning :
این همان زمان ثانویه است.

🔹مقادیر بازگشتی :
یک مقدار از نوع double که همان اختلاف زمان به ثانیه است

#include <iostream>
#include <ctime>
using namespace std;

int main( )
{
time_t tim1,tim2;
double s;
time(&tim1);
for(int i=0;i<=9999;i++)
{
//دستورات
}
time(&tim2);
s=difftime(tim1,tim2);
cout<<s<<endl;
return 0;
}

مثال بالا زمان تلف شده توسط یک تکه کد را محاسبه می کند.

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

int main ( )
{
time_t now;
struct tm newyear;
double seconds;

time(&now);
/*get current time;same as:now=time(NULL) */

newyear=*localtime(&now);

newyear.tm_hour=0;
newyear.tm_min=0;
newyear.tm_sec=0;
newyear.tm_mon=0;
newyear.tm_mday=1;

seconds=difftime(now,mktime(&newyear));

cout<<seconds since new year in the current timezone.\n"<<seconds;

return 0;
}


Output:
3777291 seconds since new year in the current timezone.

برنامه بالا یک مثال برای پیدا کردن اختلاف روز است.

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

@Learncpp