کرم های کامپیوتر





قالب وبلاگ در حال ویرایش شدن!

ممکن است اشکالاتی در قالب پیش بیاید
بنابراین پیشاپیش متاسفیم!

کرم های کامپیوتر

من و دوستم دو تا کرمیم که داریم تو سیستم ها وُل می خوریم و بعضی وقت ها براتون چیزایی که تو این وُل خوردن ها یاد گرفتیم رو می نویسیم!!!!!

ربات تلگرامی ما
آخرین نظرات
  • ۱۰ تیر ۹۷، ۲۰:۵۴ - پسر ساده
    داس

رشته ها در سی - قسمت اول

پنجشنبه, ۱۳ اسفند ۱۳۹۴، ۰۲:۲۴ ب.ظ

این پست در حال بروز رسانی است.

رشته ها(Strings) مجموعه ای از کاراکتر ها هستند که برای نمایش پیغام ها، ذخیره اسامی و ... کاربرد دارند. این آموزش را میتوان در سی پلاس پلاس نیز استفاده کرد.

در زبان سی بر خلاف بسیاری از زبان ها برای حفظ سادگی زبان، نوع داده ای مبنایی برای ذخیره رشته ها وجود ندارد. در نتیجه شما باید رشته ها را بصورت آرایه ای از کاراکتر ها معرفی کنید.

یک کاراکتر در زبان سی به این صورت تعریف میشود:

char ch = 'A';

char یک نوع متغیر صحیح است که محدوده آن از 0 تا 255 می باشد و برای ذخیره کاراکتر های اسکی همین کافی است. در حال حاضر متغیر ch مقدار 65 را دارد که معادل A در جدول کاراکتر های اسکی است.

همانطور که گفته شد یک رشته را باید با استفاده از آرایه ها در زبان سی شبیه سازی بکنید:

char hello[] = "Hello";

اگر در حین معرفی آرایه تعداد عضو های آنرا مشخص نکنید( مانند کد بالا) اندازه آن برابر خواهد بود با طول رشته شما + 1 . برای مثال رشته hello در اینجا  6 کاراکتر طول دارد. 5 کاراکتر، کاراکتر هایی هستند که خودم مشخص کردم و کاراکتر ششم کاراکتر پوچ هست که در زبان سی پایان رشته را مشخص میکند. بهتر است همیشه حساب این را داشته باشید :)

اما بعد، رشته ها در زبان سی به دو صورت تعریف میشوند:

char *s = "Hello";
char s[6] = "Hello";

حالت اول یک اشاره گر را معرفی میکند که به اولین بایت رشته اشاره میکند. اما حالت دوم آرایه ای را با طولی مشخص تعین میکند.

ورودی و خروجی

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

چاپ رشته در خروجی

دو تابع puts و printf برای اینکار وجود دارند. تابع puts یک رشته را به عنوان ورودی میگیرد و آنرا به همراه یک کاراکتر خط جدید در خروجی استاندارد مینویسد:

char *s = "Hello World!";
puts(s);

اما تابع printf میتواند یک رشته را با فرمت خاصی به خروجی ارسال کند:

char *s = "Faroogh";
printf("name is %s",s);

توجه کنید که در استفاده از هر دو تابع تفاوتی نمیکند که رشته به چه روشی تعریف شده باشد. برای اطمینان کد های زیر را کامپایل کنید:

char s[] = "GNU";
puts(s);
printf("%s",s);

نکته ای دیگر اینکه خط سوم کد بالا، یعنی استفاده از تابع printf فقط برای چاپ یک رشته، در بسیاری از کامپایلر ها برای بهینه سازی با puts جایگزین میشود.[1]

دریافت رشته از ورودی

توابع scanf و gets برای اینکار وجود دارند، تابع gets منسوخ شده است پس در مورد آن توضیحی نمیدهم، در مورد scanf هم باید مراقب باشید رشته به اندازه ای طول دارد تا ورودی را در خود ذخیره بکند.

#include <stdio.h>

int main(){
char a[10] = {0};
scanf("%s", a);
printf("Hello %s\n", a);
return 0;
}

پردازش رشته ها

برای مقایسه،کپی،الحاق، جستجوی رشته ها نیز توابعی وجود دارد.این توابع همه در فایل سرآمد string.h هستند.

مقایسه رشته ها

تابع strcmp تک تک بایت های دو رشته را با هم مقایسه میکند و در صورت تطابق مقدار ۰ را پر میگرداند. تابعی مشابه به اسم strncmp نیز وجود دارد که تنها n کاراکتر اول را با هم مقایسه میکند.

#include <string.h>
#include <stdio.h>

int main(){
char *s1 = "Joe";
char *s2 = "Joe";
char *s3 = "John";
if (strcmp(s1, s2) == 0)
puts("s1 and s2 are the same");
if (strncmp(s1, s3, 2) == 0)
puts("two character from beginning of s1 and s3 are same");
return 0;
}

نظرات (۴)

کد ها را در codepad.org وارد کرده و سپس لینک آن را در نظر قرار دهید

سلام چرا تو این کد a[10]رو برابر 0 گذاشتین؟
#include

int main(){
char a[10] = {0};
scanf("%s", a);
printf("Hello %s\n", a);
return 0;
}
فاروق کریمی زاده

لطفا دفعه بعد کد رو توی برچسب <code> بزارید تا بتونیم بخونیمش!
دلیلش اینه که اگر اینکار رو نمیکردیم، آرایه با مقادیر تصادفی پر میشد. اینکار رو کردم تا تمام اعضای آرایه با بایت‌های صفر پر بشن و یک رشته با طول صفر داشته باشیم.اگر اینجا اینکار رو نمیکردم توی اجرای برنامه مشکلی پیش نمیومد اما توی کاربرد دیگه ممکن بود پیش بیاد.در کل بنظرم عادت خوبیه.
سلام.
میخوام برای یه بازی که در سه سطح آسون (9×9)و متوسط (16×16)و سخت (16×30) هستش بصورت تصادفی بمب تولید کنم. برای سطح آسون 10 تا بمب برای سطح متوسط 40 تا بمب و برای سطح سخت 99 تا بمب. باید از تابع rand , srandاستفاده کنم. امکانش هست راهنماییم کنین؟ هرجور مینویسم نمیشه.
فاروق کریمی زاده

البته من بازی‌ساز نیستم و از زبان سی تنها در حد توابع استانداردش میدونم اما اگر مسئله تولید عدد تصادفی باشه شاید بتونم کمک کنم.
شما کار با اون دو تابع رو بلدی؟ و کدت چیه؟
بله کار باهاشونو بلدم. کل کدم 247خطه.
فاروق کریمی زاده

کل کد رو نیاز ندارم، مسئله رو ساده کنید و فقط اون قسمتش رو که مشکل دارید بپرسید.
سلام خیلی ممنون. حل شد
فاروق کریمی زاده

میدانم خیلی کمک کردم!
ارسال نظر آزاد است، اما اگر قبلا در بیان ثبت نام کرده اید می توانید ابتدا وارد شوید.
شما میتوانید از این تگهای html استفاده کنید:
<b> یا <strong>، <em> یا <i>، <u>، <strike> یا <s>، <sup>، <sub>، <blockquote>، <code>، <pre>، <hr>، <br>، <p>، <a href="" title="">، <span style="">، <div align="">
تجدید کد امنیتی