<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                合規國際互聯網加速 OSASE為企業客戶提供高速穩定SD-WAN國際加速解決方案。 廣告
                [TOC] ## 題目1: 把字符串轉化為整數 有整數字符串,` "13579"`, 和 `"246810"`. 請寫一個函數把這兩個字符串轉化為整數 步驟: * 先判斷正負 * 遍歷字符串,轉換字符為整數 ``` //atoi.cc #include <stdio.h> int my_atoi(char *str) { bool bmin = false; int result = 0; //先判斷正負 if ((*str > '9' || *str < '0') && (*str == '+' || *str == '-')) { if (*str == '-') bmin = true; str++; } while (*str != '\0') { if (*str > '9' || *str < '0') break; //printf("befter str: %s\n", str); result = result * 10 + (*str++ - '0'); //printf("after str: %s\n", str); } if (*str != '\0') return 0; return bmin ? -result : result; } int main() { char a[] = "13579"; char b[] = "246810"; printf("a: %d\n", my_atoi(a)); printf("b: %d\n", my_atoi(b)); } ``` 編譯&運行 ``` $ g++ -o atoi atoi.cc $ ./atoi a: 13579 b: 246810 ``` ## 基礎知識補充 * `*str++`: 它的運算順序是先返回`*str`的值,然后`str`再`++`。 * `(*str)++`: 它的運算順序是先返回`*str`的值,然后 `*str`的值再++ * `*(str++)`: 它的運算順序是先返回`*str`的值,然后`str`再`++`。和`*str++`的運算順序是一樣的。 * `++*str`: 先將 `*str`的值`++`,然后再返回 `*str`的值。 * `++(*str)`: 先將 `*str`的值`++`,然后再返回` *str`的值,所以它和`++*str`是一樣的。 * `* (++str)`,先將`str`的值`++`,然后再返回 `* str`的值,和 `*++str`是等價的。 `*str++ - '0'`: 表達式的意思是`字符 - ’0‘ = 整數`,可以通過ASCII碼來計算。舉個例子: ``` //ascii.cc int main() { int a = 2; char c = '3'; char b = '0' + a; int d = a + (c -'0'); printf("int + char = %c, d: %d\n",b,d); } ``` 編譯運行 ``` $ gcc -g -o ascii ascii.cc $ ./ascii int + char = 2, d: 5 ``` 可以看到 `char b = '0' + a;` * `'0'`的十進制`ascii`值是`48` * `48 + 2 = 50` * `b`的值是字符`'2'`, 十進制`ascii`值是`50` ,對應的值是字符`'2'`,打印出來的值正確; 再看` int d = a + (c -'0');` * `c`的值是字符`'3'`,對應的十進制`ascii`是`51` * `c- ‘0’ = 51 - 48 = 3` * `int d = a + (c -'0') = a + 3 = 2 + 3 = 5 `, 打印出來的值正確; 可以得出結論: * 整數 + ‘0’ =整數值字符, 舉例: `2 + '0' = '2';` * 字符 - ‘0‘ = 字符值整數, 舉例:` ‘2’ - '0' = 2;` ## 題目2:把整數轉化為字符串 請把整數`123456`轉化為字符串; 步驟: * 求出整數的最大位(個/十/百/千/萬) * 遍歷位數,將整數轉化為字符 ``` // itoa.cc int my_itoa(long i, char* str) { int power = 0, j = 0; j = i; //求出整數的最大位 for (power = 1; j>10; j /= 10) power *= 10; //遍歷位數,將整數轉化為字符 for (; power>0; power /= 10) { *str++ = '0' + i / power; i %= power; } *str = '\0'; } int main() { char str[7]; my_itoa(123456, str); printf("str: %s\n", str); } ``` 編譯&運行 ``` $ g++ -g -o itoa itoa.cc -std=c++11 $ ./itoa str: 123456 ```
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看