使用c语言解析字符串"176x144"中的数字

 在做jpeg codec的时候,经常需要输入图片的大小,即长和宽。对于一个jpeg图片,它的大小几乎是任意的,所以只能用数字来表示,而不能选择cif,qcif等这类固定的图片格式。在用数字表示图片大小时,大家都习惯使用象176x144这样格式。为了获取长和宽,需要解析这个字符串。


下面,简单介绍一下在c语言中如何对176x144的解析。

#include <stdlib.h>

int main()
{
  char *str = "176x144";
  char *pDest;
  char strTmp[100];
  int g_pic_wid,g_pic_hei;
 
  //将str所指字符串拷贝一份,存储在strTmp中,以供解析width
  strcyp(strTmp,str);
  //在strTmp中找到最后一个,即第一个出现的'x'的位置
  pDest = strrchr((const char*)strTmp,(int)'x');
  if(pDest)//如过找到了'x'
  {
    *pDest = '/0';//strTmp中的数据为“176/0144”,即截断了后面的数据
    //将“176”转化为int类型
    g_pic_wid = atoi(strTmp);
    //在str中找到最后一个,即第一个出现的'x'的位置
    pDest = strrchr((const char *)str, (int)'x');
    if(!pDest)
      pDest = str;
    else
      pDest++;//如果找到了,指向'x'的下一个位置

    //将从pDest所指的位置往后的数据(即“144/0”)拷贝到strTmp中
    strcyp(strTmp, pDest);
    //将“144”转化为int类型
    g_pic_hei = atoi(strTmp);
  }
 
  printf("pictrue width:%d, height:%d !/n",g_pic_wid, g_pic_hei);
  pDest = NULL;
  return 0;
}

这段函数中,大家可能对strrchr函数不大熟悉,下面将会对其做一个详细的介绍。

/*

   Finds the last occurrence of ch in string.  The terminating null character is used as

part of the search.

   查找在字符串中最后一次出现字符’ch’的位置。如果str中存在字符ch,返回出现ch的位置的指针;

否则返回NULL。

*/

#include <stdlib.h>

char * my_strrchr(const char * str,int ch)

{

   char *p = (char *)str;

   while (*str) str++;

   while (str-- != p && *str != (char)ch);

   if (*str == (char)ch)

        return( (char *)str );

   return(NULL);

}

int main()

{

   char *str = "ammana_babi";

   char * p;

   char ch;

  

   ch = '9';

   p = (char *)my_strrchr(str,ch);

   if(p == NULL)

      printf("Can't find the character %c !/n",ch);

   else

      printf("Find the character %c !/n",*p);

  

   ch = 'b';

   p = (char *)my_strrchr(str,ch);

   if(p == NULL)

      printf("Can't find the character %c !/n",ch);

   else

      printf("Find the character %c !/n",*p);

   system("pause");

   return 0;
}

 

更多请看:http://www.chituwang.com/Article/IT/detail.aspx?articleid=18092

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值