( تعداد نمایش : 2226 )

اشاره گرها و رشته ها آموزش سی قسمت سی

اشاره گرها و رشته ها

چون رشته ها در زبان C بصورت آرایه تعریف می شوند بین آنها و اشاره گرها نیز
ارتباط نزدیکی وجود دارد . بطوری که بسیاری از توابع کتابخانه ای که با رشته ها
سر و کار دارند ، ارتباط نزدیکی با اشاره گرها پیدا می کنند . بعنوان مثال تابع
()strchr که محل اولین وقوع کاراکتری را در رشته ای پیدا می کند بصورت زیر
استفاده می شود :
) <رشته > و <کاراکتر مورد جستجو>(= strchr اشاره گر

مثال ۱: برنامه ای که یک رشته و کاراکتری را از ورودی خوانده و محل اولین
وقوع این کاراکتر را در رشته پیدا می کند . main)(
{
char ch/line[81]/*ptr/*strchr )(;
printf(“\nenter string to search:\n”);
gets(line );
printf(“\n enter a character: ” );
ch=getche )(;
ptr=strchr(line/ch );
printf(“\n the string start at ” );
printf(“address:%u/line” );
printf(“\n first occurence of” );
printf(” <%c> is address:%u”/ch/ptr);
printf(“\n this is position:” );
printf(“%d( start from 0)”/ptr-line);
}

نمونه ای از خروجی برنامه مثال ۱ : enter string to search:
c has no bound checking.
enter a character: k
the string start at address:3984

first occurence of is address:8291
this is position:20(start from 0 );

همانطوریکه ازخروجی برنامه مثال ۱ پیداست تابع strchr با جستجوی یک کاراکتر
در یک رشته ، آدرس این کاراکتر را بعنوان نتیجه عمل مشخص میکند و در یک اشاره گر
قرار می دهد . همانطور که قبلا” گفته شد ، اگر تابعی دارای نوعی غیر از “صحیح ”
باشد باید در تابع فراخواننده ، نوع آن به کامپایلر اعلام گردد . لذا در مثال
(َ۱) نوع تابع ()strchr بصورت اشاره گر به کاراکتر تعریف شده است . البته اگر با
استفاده از دستور پیش پردازنده # include فایل “string” به برنامه معرفی گردد
نیازی به تعریف این تابع بصورت اشاره گر نیست .

مثال ۲: برنامه ای که رشته ای را از ورودی دریافت کرده و کلیه حروف کوچک این
رشته را به حروف بزرگ تبدیل می کند . main)(
{
char s[50] ;
printf(“enter a string in”);
printf(” lowercase:\n”);
gets(s );
upper(s );
printf(“\n uppercase of”);
printf(” string is:\n”);
puts(s );
}

upper(char *string)
{
while(*string)
{
if(*string>=’a’ && *string<=’z')
*string=*string-32 ;
string++ ;
}
}

نمونه ای از خروجی برنامه مثال ۲ : enter a string in lowercase:
in c all keyword are lowercase.
uppercase of string is:
IN C ALL KEYWORD ARE LOWERCASE.

مثال ۳: برنامه ای که رشته ای را از ورودی خوانده و کلیه حروف بزرگ موجود در
رشته را به حروف کوچک تبدیل می کند : main)(
{
char s[50] ;
printf(“enter a string in”);
printf(” uppercase:\n”);
gets(s );
upper(s );
printf(“\n lowercase of string”);
printf(” is:\n”);
puts(s );
}

upper(char *string)
{
while(*string)
{
if(*string>=’A’ && *string<=’Z')
*string+=32 ;
string++ ;
}
}

نمونه ای از خروجی برنامه مثال ۳ : enter a string in uppercase:
THIS IS A TEST FOR CONVERT TO LOWER.
lowercase of string is:
this is a test for convert to lower.

مثال ۴: برنامه ای که یک رشته و کاراکتری را از ورودی خوانده و تعداد دفعات
تکرار این کاراکتر را رشته مشخص می کند . main)(
{
char string[40] / ch ;
int count ;
printf(“enter string for search:\n”);
gets(string );
printf(“\n enter a character:” );
ch=getche )(;
count=char_count(string/ch );
printf(“\n number of occurs of ” );
printf(“char <%c> is:%d”/ch/count );
}

char_count(char *s/char letter)
{
int count=0 ;
while(*s)
if(*s++==letter)
count ++ ;
return(count );
}

نمونه ای از خروجی برنامه مثال ۴ : enter string for search:
this is a simple test.
enter a character:
number of occurs of char is:3

مثال ۵: برنامه ای که رشته عددی را از ورودی خوانده و سپس آن را به مقدار
عددی تبدیل می کند . main)(
{
int number ;
char s[10] ;
printf(“\n string representation”);
printf(” of numeric:” );
gets(s );
ascii_to_int(&number/s );
printf(“\n numeric value of “);
printf(“string is:%d”/number );
}

ascii_to_int(int *value/char *str)
{
int sign=1 ;
*value=0 ;
while(*str==’ ‘ )str++ ;
if(*str==’-’ || *str==’+')
sign=(*str++==’-’ )?- 1:1;
while(*str)
if((*str>=’0′ )&&( *str<=’9′))
*value=(*value*10)+(*str++- 48 );
else
{
printf(“Watning: the<%c> is:”/*str);
printf(” invalid character.” );
exit(0 );
}
*value *=sign ;
}

خروجی های حاصل از ۴ بار اجرای برنامه مثال ۵ : string representation of a numeric-:342( 1)
numeric value of string is-:342

string representation of a numeric:+2341( 2)
numeric value of string is:+2341

string representation of a numeric:543( 3)
numeric value of string is:543

string representation of a numeric:45y4( 4)
Watning: the is invalid character.

مثال ۶: برنامه ای که عددی را از ورودی خوانده و سپس آن را به رشته تبدیل
می کند . main)(
{
int number ;
char s[10] ;
printf(“\n enter a number: ” );
scanf(“%d”/&number );
int_to_ascii(number/s );
printf(“\n the string value is:%s”/s);
}

int_to_ascii(int*value/char *str)
{
int sign=value ;
char temp / *savestr=str ;
if(value<0)
value*=-1 ;
do{
*str++=(value % 10)+48 ;
value=value/10 ;
} while(value>0 );
if( sign<0)
*str++=’-’ ;
*str– =’\0′ ;
while(savestr
{
temp=*str ;
*str–=*savestr ;
*savestr++=temp ;
}
}

نمونه ای از خروجی برنامه مثال ۶ : enter a number:2341
the st

دیدگاه خود را بیان کنید.

باید وارد سایت شده باشید برای دیدگاه دادن