hossein2kk
یک شنبه 16 خرداد 1389, 01:45 صبح
سلام دوستان
امروز بنا به یه تمرین انشجویی داشتم تابع Strcmp رو می نوشتم که به یک نکته جالب برخوردم که گفتم شاید برای شما هم جالب باشه ، این کد من بوده :
# include <iostream.h>
# include <conio.h>
int strcmp (char* str1 , char* str2) {
while (*str1 != '\0' && *str2 != '\0' && *str1 ==*str2){
str1++;
str2++;
}
return (int) (*str2 - *str1) ;
}
int strncmp (char* str1 , char* str2 , int count) {
int i = 0;
while (*str1 != '\0' && *str2 != '\0' && *str1 == *str2 && i < count){
str1++;
str2++;
i++;
}
return (int) (*str2 - *str1) ;
}
int main (){
int c ;
char a [40] , b[40];
cin >> a >> b >> c;
cout << "Strcmp :\nFunction return value = " << strcmp(a,b) << endl ;
cout << "\nStrncmp :\nFunction return value = " << strncmp(a,b,c) ;
getch();
return 0;
}
این کد طوریه که تا جایی که با هم برابرن یا تا وقتی که هیچ کدوم به انتها نرسیدن پیش میره و در صورت ارضا نشدن یکی از سه شرط + یه شرط تعدادی تو تابع دوم ، میاد پایین و توی اون قسمت کاراکتر هایی که رسیده رو از هم کم می کنه .
من برای جالب بود ببینم کامپایر چه خروجی برای توابع تو کار خودش میده که کدم صحیح تر باشه به خاطر همین توابعم رو کامنت کردم و String.h رو Include کردم ، وقتی به کامپایلر (ِDev-c++ 4.9.9.2)عبارت های hossein و hos و مقدار 3 کاراکتر برای مقایسه رو دادم ، تو تابع دوم که مقدار 0 رو برگردوند که خوب درستم بود ، ولی تو تابع اول مقدار 1 :متعجب: این در صورتی بود که تو Borland Turbo C++ 4.5 مقدار درست یعنی 115 رو نشون میداد ، حالا من تابعم رو بر اساس Borland نوشتم چون به نظرم درست تر بود .
البته برام این سوال بوجود اومد که این 1 رو Mingw از کجا آوردi ؟!! :متفکر:
امروز بنا به یه تمرین انشجویی داشتم تابع Strcmp رو می نوشتم که به یک نکته جالب برخوردم که گفتم شاید برای شما هم جالب باشه ، این کد من بوده :
# include <iostream.h>
# include <conio.h>
int strcmp (char* str1 , char* str2) {
while (*str1 != '\0' && *str2 != '\0' && *str1 ==*str2){
str1++;
str2++;
}
return (int) (*str2 - *str1) ;
}
int strncmp (char* str1 , char* str2 , int count) {
int i = 0;
while (*str1 != '\0' && *str2 != '\0' && *str1 == *str2 && i < count){
str1++;
str2++;
i++;
}
return (int) (*str2 - *str1) ;
}
int main (){
int c ;
char a [40] , b[40];
cin >> a >> b >> c;
cout << "Strcmp :\nFunction return value = " << strcmp(a,b) << endl ;
cout << "\nStrncmp :\nFunction return value = " << strncmp(a,b,c) ;
getch();
return 0;
}
این کد طوریه که تا جایی که با هم برابرن یا تا وقتی که هیچ کدوم به انتها نرسیدن پیش میره و در صورت ارضا نشدن یکی از سه شرط + یه شرط تعدادی تو تابع دوم ، میاد پایین و توی اون قسمت کاراکتر هایی که رسیده رو از هم کم می کنه .
من برای جالب بود ببینم کامپایر چه خروجی برای توابع تو کار خودش میده که کدم صحیح تر باشه به خاطر همین توابعم رو کامنت کردم و String.h رو Include کردم ، وقتی به کامپایلر (ِDev-c++ 4.9.9.2)عبارت های hossein و hos و مقدار 3 کاراکتر برای مقایسه رو دادم ، تو تابع دوم که مقدار 0 رو برگردوند که خوب درستم بود ، ولی تو تابع اول مقدار 1 :متعجب: این در صورتی بود که تو Borland Turbo C++ 4.5 مقدار درست یعنی 115 رو نشون میداد ، حالا من تابعم رو بر اساس Borland نوشتم چون به نظرم درست تر بود .
البته برام این سوال بوجود اومد که این 1 رو Mingw از کجا آوردi ؟!! :متفکر: