اطلاعیه

Collapse
No announcement yet.

استخراج عدد از رشته در زبان c

Collapse
X
 
  • فیلتر
  • زمان
  • Show
Clear All
new posts

    استخراج عدد از رشته در زبان c

    سلام. چطوری میتونم عدد 27 تو عبارت Delay=27m استخراجش کنم. این عدد بعدا در سون سگمنت میخوام نمایش بدم.
    یک کدی نوشتم اما نمیدونم چطوریه:
    کد HTML:
    #include <mega32.h>
    #include <delay.h>
    
    unsigned char i,j,j2;
    char x[50];
    char str[50]="Speed=120K Delay=27 Hum=30% Time=12:20";
    
    void main(void)
    {
    DDRA  = 0xFF;  // for 7seg
    PORTA = 0x00;
    
    while (1)
          {
          for (i=0;i<50;i++)
          {
              x[i]=str[i];
              if (x[i] == "D")
              {
                  i++;
                  x[i]=str[i];
                  if (x[i] == "e")
                  {
                  j=1;
                  j2=i+5;
                  x2[j]=str[j2];
                  t1[1]=x2[j];
                  j++;
                  x2[j]=str[j2];
                  t2=x2[j];
                  }
              }
          }
    
          PORTA=x2;
          delay_ms(2000);
          }
    }

    #2
    پاسخ : استخراج عدد از رشته در زبان c

    باسلام.
    اگه فرض کنیم که در رشته ارقام پشت سرهم باشن و خروجی رو بخواید روی سون سگمنت نشون بدید این کد مناسب شماست:


    char *data = "delay=27m";
    int i = 0;
    while (*data){
    if(((*data) >= '0') && ((*data) <= '9')){
    disp_data[i] = ((*data) - 48);
    i++;
    }
    data++;
    }
    طرز کار ساده ای هم داره ،اگه کاراکتر مدنظر نظر در جدول اسکی بین 48 و 57 بود اون رو به بافر سون سگمنت انتقال میده و دیگه نیاز نیست یه بار به عدد صحیح تبدیل کنید و دوباره برای نمایش روی سون سگمنت تقسیم کنید.

    دیدگاه


      #3
      پاسخ : استخراج عدد از رشته در زبان c

      خیلی ممنون. تقریبا متوجه کد شدم اما ین مقدار *data نفهمیدم. این یعنی چی؟ تو خط اول و در قسمت if اون علامته* میشه توضیح بدید.
      نوشته اصلی توسط A.I.E نمایش پست ها
      باسلام.
      اگه فرض کنیم که در رشته ارقام پشت سرهم باشن و خروجی رو بخواید روی سون سگمنت نشون بدید این کد مناسب شماست:


      char *data = "delay=27m";
      int i = 0;
      while (*data){
      if(((*data) >= '0') && ((*data) <= '9')){
      disp_data[i] = ((*data) - 48);
      i++;
      }
      data++;
      }
      طرز کار ساده ای هم داره ،اگه کاراکتر مدنظر نظر در جدول اسکی بین 48 و 57 بود اون رو به بافر سون سگمنت انتقال میده و دیگه نیاز نیست یه بار به عدد صحیح تبدیل کنید و دوباره برای نمایش روی سون سگمنت تقسیم کنید.

      دیدگاه


        #4
        پاسخ : استخراج عدد از رشته در زبان c

        نوشته اصلی توسط alibbb نمایش پست ها
        خیلی ممنون. تقریبا متوجه کد شدم اما ین مقدار *data نفهمیدم. این یعنی چی؟ تو خط اول و در قسمت if اون علامته* میشه توضیح بدید.
        باسلام.
        الان دیدم که دیتاتون توی یه رشته هست در نتیجه اگه ممکن باشه باید دیتا ها جدا تعریف بشن یا هم اینکه با یکم کد مکانیزمی که من گفتم رو بعد از Delay= و اسپیس اجرا کنید تا همین کار رخ بده.
        اون ستاره هم یکی از اپراتور های مربوط به پوینتر هست که محتوی آدرس داخل دیتا (یا همون [i]data) رو نشون میده.مزیت استفاده از پوینتر اینه که دیگه نیاز به کانتر جداگانه برای اندیس دهی آرایه نیست و بدی اون هم اینه که فقط یه بار قابل استفاده است چون وقتی data که حاوی آدرس اولین مکان آرایه هست تغییر پیدا میکنه تا به خانه بعدی اشاره کنه ،بعد از اتمام کار دیگه به اولین مکان اشاره نمیکنه و عملا باید این کار دستی صورت بگیره.
        حالا چرا data* داخل وایل هست؟میدونیم که هر رشته ای در سی که بین دابل کوت قرار داده شده به یک صفر یا 'n\' ختم میشه ،پس اون شرط تازمانی که که محتوی آدرس داخل دیتا که با * بهش دسترسی داریم صفر نیست کار میکنه و وقتی به صفر برسه یعنی به انتهای رشته رسیدیم و کار تموم شده.
        یه توصیه هم دارم ،بهتره سراغ یه منبع آموزشی برید و مبحث پوینتر ها رو کاملا درک کنید چون برنامه نویسی امبدد به شدت وابسته به همین مسائل هست و بلد نبودن پوینتر یعنی عملا درگیری با مشکلات متعدد در برنامه نویسی امبدد.

        دیدگاه

        لطفا صبر کنید...
        X