<output id="qn6qe"></output>

    1. <output id="qn6qe"><tt id="qn6qe"></tt></output>
    2. <strike id="qn6qe"></strike>

      亚洲 日本 欧洲 欧美 视频,日韩中文字幕有码av,一本一道av中文字幕无码,国产线播放免费人成视频播放,人妻少妇偷人无码视频,日夜啪啪一区二区三区,国产尤物精品自在拍视频首页,久热这里只有精品12
        My Github

      劍指Offer面試題:35.將字符串轉換為數字

      一、題目:將字符串轉換為數字

      題目:寫一個函數StrToInt,實現把字符串轉換成整數這個功能。當然,不能使用atoi或者其他類似的庫函數。

      二、代碼實現

        (1)考慮輸入的字符串是否是NULL、空字符串

        (2)考慮輸入的字符串是否包含正負號或者是否是只包含正負號

        (3)考慮輸入的字符串是否會發生上溢或下溢(正整數的最大值是0x7FFFFFFF,最小的負整數是0x80000000)

        (4)考慮如何區分正常返回數字0和返回輸入是否合法的標識

        綜上考慮,實現代碼如下,這里使用C#語言描述:

        ①定義一個ConvertResult的結構體,作為返回值使用

          public struct ConvertResult
          {
              public ConvertState State;
              public int Number;
          }
      
          public enum ConvertState
          {
              // 輸入不合法
              InValid = 0,
              // 輸入合法
              Valid = 1
          }

        ②定義方法主入口,在主入口中判斷輸入是否含有正負號并做對應處理

          public static ConvertResult StrToInt(string str)
          {
              ConvertResult result = new ConvertResult();
              result.State = ConvertState.InValid;
              result.Number = 0;
      
              if (!string.IsNullOrEmpty(str))
              {
                  bool minus = false;
                  char[] strArray = str.ToCharArray();
                  int startIndex = 0;
                  if (strArray[startIndex] == '+')
                  {
                      startIndex++;
                  }
                  else if (strArray[startIndex] == '-')
                  {
                      minus = true;
                      startIndex++;
                  }
      
                  if (startIndex != strArray.Length)
                  {
                      StrToIntCore(strArray, startIndex, minus, ref result);
                  }
              }
      
              return result;
          }

        ③定義核心方法StrToIntCore,將字符串轉換為數字并為ConvertResult實例賦值,在此方法中判斷是否發生上溢或下溢

          private static void StrToIntCore(char[] strArray, int index, bool minus, ref ConvertResult result)
          {
              long number = 0;
      
              while (index < strArray.Length)
              {
                  if (strArray[index] >= '0' && strArray[index] <= '9')
                  {
                      // 首先需要注意正負號
                      int flag = minus ? -1 : 1;
                      number = number * 10 + flag * (strArray[index] - '0');
                      // 正整數的最大值是0x7FFFFFFF,最小的負整數是0x80000000
                      // 因此需要考慮整數是否發生上溢出或者下溢出
                      if ((flag == 1 && number > int.MaxValue) ||
                          (flag == -1 && number < int.MinValue))
                      {
                          number = 0;
                          break;
                      }
                      index++;
                  }
                  else
                  {
                      number = 0;
                      break;
                  }
              }
      
              if (index == strArray.Length)
              {
                  result.State = ConvertState.Valid;
                  result.Number = (int)number;
              }
          }

      三、單元測試

      3.1 測試用例

          // 魯棒性測試:NULL指針
          [TestMethod]
          public void StringToIntTest1()
          {
              ConvertResult actual = StringHelper.StrToInt(null);
              Assert.AreEqual(actual.State, ConvertState.InValid);
          }
      
          // 魯棒性測試:空字符串
          [TestMethod]
          public void StringToIntTest2()
          {
              ConvertResult actual = StringHelper.StrToInt("");
              Assert.AreEqual(actual.State, ConvertState.InValid);
          }
      
          // 功能測試:普通的數字字符串
          [TestMethod]
          public void StringToIntTest3()
          {
              ConvertResult actual = StringHelper.StrToInt("123");
              Assert.AreEqual(actual.State, ConvertState.Valid);
              Assert.AreEqual(actual.Number, 123);
          }
      
          // 功能測試:帶正負號的數字字符串
          [TestMethod]
          public void StringToIntTest4()
          {
              ConvertResult actual = StringHelper.StrToInt("+123");
              Assert.AreEqual(actual.State, ConvertState.Valid);
              Assert.AreEqual(actual.Number, 123);
          }
      
          // 功能測試:帶正負號的數字字符串
          [TestMethod]
          public void StringToIntTest5()
          {
              ConvertResult actual = StringHelper.StrToInt("-123");
              Assert.AreEqual(actual.State, ConvertState.Valid);
              Assert.AreEqual(actual.Number, -123);
          }
      
          // 功能測試:帶正負號的字符串0
          [TestMethod]
          public void StringToIntTest6()
          {
              ConvertResult actual = StringHelper.StrToInt("+0");
              Assert.AreEqual(actual.State, ConvertState.Valid);
              Assert.AreEqual(actual.Number, 0);
          }
      
          // 功能測試:帶正負號的字符串0
          [TestMethod]
          public void StringToIntTest7()
          {
              ConvertResult actual = StringHelper.StrToInt("-0");
              Assert.AreEqual(actual.State, ConvertState.Valid);
              Assert.AreEqual(actual.Number, 0);
          }
      
          // 特殊輸入測試:非數字字符串
          [TestMethod]
          public void StringToIntTest8()
          {
              ConvertResult actual = StringHelper.StrToInt("1a33");
              Assert.AreEqual(actual.State, ConvertState.InValid);
              Assert.AreEqual(actual.Number, 0);
          }
      
          // 特殊輸入測試:有效的最大正整數 0x7FFFFFFF
          [TestMethod]
          public void StringToIntTest9()
          {
              ConvertResult actual = StringHelper.StrToInt("+2147483647");
              Assert.AreEqual(actual.State, ConvertState.Valid);
              Assert.AreEqual(actual.Number, 2147483647);
          }
      
          [TestMethod]
          public void StringToIntTest10()
          {
              ConvertResult actual = StringHelper.StrToInt("-2147483647");
              Assert.AreEqual(actual.State, ConvertState.Valid);
              Assert.AreEqual(actual.Number, -2147483647);
          }
      
          [TestMethod]
          public void StringToIntTest11()
          {
              ConvertResult actual = StringHelper.StrToInt("+2147483648");
              Assert.AreEqual(actual.State, ConvertState.InValid);
              Assert.AreEqual(actual.Number, 0);
          }
      
          // 特殊輸入測試:有效的最小負整數 0x80000000
          [TestMethod]
          public void StringToIntTest12()
          {
              ConvertResult actual = StringHelper.StrToInt("-2147483648");
              Assert.AreEqual(actual.State, ConvertState.Valid);
              Assert.AreEqual(actual.Number, -2147483648);
          }
      
          [TestMethod]
          public void StringToIntTest13()
          {
              ConvertResult actual = StringHelper.StrToInt("+2147483649");
              Assert.AreEqual(actual.State, ConvertState.InValid);
              Assert.AreEqual(actual.Number, 0);
          }
      
          [TestMethod]
          public void StringToIntTest14()
          {
              ConvertResult actual = StringHelper.StrToInt("-2147483649");
              Assert.AreEqual(actual.State, ConvertState.InValid);
              Assert.AreEqual(actual.Number, 0);
          }
      
          // 特殊輸入測試:只有一個正號
          [TestMethod]
          public void StringToIntTest15()
          {
              ConvertResult actual = StringHelper.StrToInt("+");
              Assert.AreEqual(actual.State, ConvertState.InValid);
              Assert.AreEqual(actual.Number, 0);
          }
      
          // 特殊輸入測試:只有一個負號
          [TestMethod]
          public void StringToIntTest16()
          {
              ConvertResult actual = StringHelper.StrToInt("-");
              Assert.AreEqual(actual.State, ConvertState.InValid);
              Assert.AreEqual(actual.Number, 0);
          }

      3.2 測試結果

        (1)測試用例通過情況

        (2)代碼覆蓋率統計

       

      posted @ 2015-09-21 22:25  EdisonZhou  閱讀(7599)  評論(4)    收藏  舉報
      主站蜘蛛池模板: 午夜福利精品国产二区| 快好爽射给我视频| 国产成人a在线观看视频免费| 激情综合色综合啪啪五月| 亚洲国产精品综合一区二区 | 韩国无码av片在线观看| 国内精品伊人久久久久影院对白 | 国产超高清麻豆精品传媒麻豆精品| av在线播放观看国产| 又大又紧又粉嫩18p少妇| 国产SM重味一区二区三区 | 亚洲熟女乱色综合一区 | 免费无码AV一区二区波多野结衣| 精品中文字幕人妻一二| 97欧美精品系列一区二区| 内射囯产旡码丰满少妇| 精品久久人人做爽综合| 国产精品久久久久7777| 男女18禁啪啪无遮挡激烈网站| 亚洲熟妇无码av另类vr影视| 许昌市| 亚洲岛国av一区二区| 亚洲二区中文字幕在线| 欧美野外伦姧在线观看| 开心激情站开心激情网六月婷婷| 人妻激情偷乱视频一区二区三区| 欧美人人妻人人澡人人尤物| 亚洲熟妇丰满多毛xxxx| 亚洲美女av一区二区| 超碰成人人人做人人爽| 亚洲色大成网站WWW永久麻豆| 亚洲国产女性内射第一区| 久久久亚洲欧洲日产国码aⅴ| 98久久人妻少妇激情啪啪| 国产福利一区二区三区在线观看| 久久国内精品自在自线观看 | 鲁一鲁一鲁一鲁一澡| 亚洲国产精品一区二区第一页| V一区无码内射国产| 无码加勒比一区二区三区四区| 久久婷婷大香萑太香蕉AV人|