色婷婷AⅤ一区二区三区|亚洲精品第一国产综合亚AV|久久精品官方网视频|日本28视频香蕉

          新聞中心

          EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計應(yīng)用 > 整數(shù)與字符串轉(zhuǎn)換的C實現(xiàn)

          整數(shù)與字符串轉(zhuǎn)換的C實現(xiàn)

          作者: 時間:2016-12-01 來源:網(wǎng)絡(luò) 收藏
          即將就業(yè),也復(fù)習(xí)復(fù)習(xí)相關(guān)的知識,看了看嵌入式C的筆試題,整體感覺考試題目還是蠻有意思的,考點都比較重要,而且比較細,主要還是設(shè)計到一些指針和數(shù)組已經(jīng)函數(shù)指針等基本的概念。

          比如:
          如何實現(xiàn)兩個值中的最大值:((a+b) + abs(a-b))/2
          如何實現(xiàn)不依靠中間量實現(xiàn)兩個變量值的交換:
          a = a + b;
          b = a - b;
          a = a - b;
          或者
          a = a^b;
          b = a^b;
          a = a^b;
          其中后面的這種方式更加的優(yōu)越。

          sizeof與strlen的區(qū)別
          其中sizeof是一個操作符,在編譯過程中就能確定結(jié)果,但是strlen是一個函數(shù),只有在運行的時候才能得到返回值。

          指針、數(shù)組、函數(shù)等各種形式的指針結(jié)合起來也是出題的重點。

          在編程中主要是設(shè)計到字符串、鏈表的處理問題,我就找?guī)讉€簡單的程序當(dāng)做練兵吧。實現(xiàn)整數(shù)和字符串之間的轉(zhuǎn)換問題。這個轉(zhuǎn)換問題實質(zhì)上是處理好ASCII碼與數(shù)字之間的切換關(guān)系,即數(shù)字的ASCII碼形式為‘0’= 0 + 48; ‘9’= 9 + 48;0 = 0-48。
          這個關(guān)系是轉(zhuǎn)換過程中最主要的問題,當(dāng)然整數(shù)到字符串的轉(zhuǎn)換過程中需要注意負數(shù)的影響,如果負數(shù)沒有正確處理,就可能出現(xiàn)一些莫名其妙的結(jié)果。

          首先實現(xiàn)字符串到整數(shù)的轉(zhuǎn)換過程:這個過程相對來說比較容易,因為這個過程可直接判斷是正數(shù)還是負數(shù),直接判斷下標0對應(yīng)的內(nèi)容即可,其他的可以通過逐步求和累加的形式實現(xiàn)。基本的轉(zhuǎn)換過程如下:

          本文引用地址:http://cafeforensic.com/article/201612/324505.htm

          int myatoi(char *src)
          {
          char flag = 0;
          int sum = 0;
          int i = 0;
          int len = strlen(src);

          /*參數(shù)的正確性*/
          if(NULL == src)
          {
          return 0;
          }

          /*是否存在符號問題*/
          if(src[i] == -)
          {
          flag = -;
          ++ i ;
          }

          for( ; i < len ; ++ i)
          {
          /*判斷字符是否合法*/
          if(src[i] < 48 && src[i] > 57)
          return 0;

          /*數(shù)據(jù)求和,注意數(shù)值的轉(zhuǎn)換問題src[i] - 48*/
          sum = sum *10 + src[i] - 48;
          }

          /*根據(jù)標志位實現(xiàn)返回正確的正負數(shù)*/
          if(flag == -)
          return -sum;
          else
          return sum;
          }

          整數(shù)到字符串的轉(zhuǎn)換:實際上就是將一個整數(shù)的各個位分離出來,然后實現(xiàn)字符串的排序問題,因為數(shù)字長度的不確定性使得不便于快速的確定字符串的長度,只能首先分解,然后排序。同時也需要注意符號的存在,基本的轉(zhuǎn)換過程如下:

          char* myitoa(int num, char *str)
          {
          char flag = 0;
          int i = 0, count = 0, j = 0;

          /*參數(shù)檢測*/
          if(NULL == str)
          {
          return NULL;
          }

          /*判斷數(shù)值的正負,設(shè)置對應(yīng)的符號*/
          if(num < 0)
          {
          str[i ++] = -;

          /************************
          同時要對數(shù)值取絕對值
          保證后面取余整除操作正常
          *************************/
          num = -num;
          }

          while(num / 10)
          {
          /***************************
          count用來保存實際的數(shù)字個數(shù),
          便于后期的順序調(diào)換
          ****************************/
          ++ count;
          /*實際保存的順序為反序列*/
          str[i++] = num % 10 + 48;
          num /= 10;
          }
          /*判斷是*/
          if(num %10)
          {
          str[i++] = num %10 + 48;
          ++ count;
          }
          /*字符串結(jié)束符*/
          str[i] = 0;

          /*實現(xiàn)數(shù)據(jù)的較好操作*/
          i = 0;
          if(str[0] == -)
          {
          i = 1;
          }
          /*實際交換的下標區(qū)間為i~j*/
          j = count + i - 1;

          for(; i < j ; ++ i, --j)
          {
          /*數(shù)據(jù)的較好操作*/
          str[i] = str[i] + str[j];
          str[j] = str[i] - str[j];
          str[i] = str[i] - str[j];
          }

          /*返回實際的字符串*/
          return str;
          }

          上面的代碼就實現(xiàn)了字符串與整數(shù)的轉(zhuǎn)換問題,基本上實現(xiàn)了各種情況的轉(zhuǎn)換。



          評論


          技術(shù)專區(qū)

          關(guān)閉