1. 程式人生 > >實現一個函式,把一個字串轉換成整數

實現一個函式,把一個字串轉換成整數

作者:翁鬆秀

劍指offer之“把一個字串轉換成整數”

很多人看到這麼簡單的面試題目,都是大筆一揮,立馬寫下洋洋灑灑函式:

int StringToInt(char* string){
    int num = 0;
    while(*string!='\0'){
        num = num*10 + *string - '0';
        string++;
    }
    return num;
}

仔細想象,面試官又不是傻子,出這麼簡單的題目肯定不是為了看你這麼簡單粗暴的實現。醉翁之意不在酒,可能他想考察你的不是你能不能實現這個簡單的函式,而是你的程式設計習慣,包括你是否會在編碼前想好測試用例,是否會考慮程式碼的規範性、完整性和魯棒性。函式的主要功能實現了,可你有沒有考慮邊界條件和錯誤處理?如果string是空指標,程式瞬幹爆炸。於是我們面對這種看似簡單的題目,應事先想好程式的基本功能、邊界條件以及錯誤處理。然後根據這三個方面去設計測試用例。可能還需要你考慮當字串長度過長的時候轉化成整數int會不會溢位等等。

//基本功能:輸入一個正常的“整數”字串”10086“?
//邊界條件:輸入的字串為”0“的時候怎麼處理?
//錯誤處理:輸入的字串為空指標的時候怎麼處理,不是含有非數字的字串又怎麼處理?
int nullFlag = 0;
int illegalFlag = 0;
int StringToInt(char* string){
    int num = 0;
    char* temp = string;
    //如果是空指標,將nullFlag賦為1,函式返回0
    if(string == NULL){
        nullFlag = 1;
        return 0;
    }
    //如果有其他字元,將illegalFlag賦為1,函式返回0
while(*temp<'0' || *temp>'9'){ illegalFlag=1; temp++; return 0; } while(*string!='\0'){ num = num*10 + *string - '0'; string++; } return num; }

針對上面考慮到的問題改進了程式,加了邊界條件判斷以及錯誤處理,但是還是沒有考慮全面,就像上面說的還有字串長度過長等問題。但你能實現基本功能,判斷邊界條件以及錯誤處理。並在編碼前能想好測試用例,我相信面試官一定會對你刮目相看,除非你遇到了一個假的面試官。

相關推薦

實現一個函式一個字串轉換整數

作者:翁鬆秀 劍指offer之“把一個字串轉換成整數” 很多人看到這麼簡單的面試題目,都是大筆一揮,立馬寫下洋洋灑灑函式: int StringToInt(char* string){ int num = 0; while(*str

實現一個函式一個字串中的字元從小寫轉為大寫。

#include <stdio.h> #include <stdlib.h> #include <conio.h> void upper(char* s, char* us) { while(*s != '\0')

【練習題】編寫一個函式一個char組成的字串迴圈右移n位

例如:原來是”abcdefghi”,如果n = 2,移位後應該是”hiabcdefg”。 思路:當讀到這個題目的時候,沒有編寫過類似程式的人可能會想,程式的實現就是依照字元的迴圈右移這樣實現的,但仔細想會發現這樣很難實現,不妨換一種思路,我們先把需要移到前面的字元取出來放進

python3 自己編寫一個程式大寫字母轉換為小寫字母(即自程式設計實現字串的lower()方法)

 #定義一個函式,可以把列表輸入的帶有大寫字母的列表,轉換為全小寫字母 #比如:輸入列表['Hello','worlD','HAHA']  ====> ['hello','world','haha'] #程式碼如下: #定義一個函式,可以把列表輸入的帶有大寫字母的列表

【c語言】字串替換空格:請實現一個函式字串中的每個空格替換“%20”

// 字串替換空格:請實現一個函式,把字串中的每個空格替換成“%20”。 // 例如輸入“we are happy.”,則輸出“we%20are%20happy.” #include <stdio.h> #include <assert.h>

【我的演算法日記】請實現一個函式字串中的每個空格替換“%20”。例如輸入“We are happy.”則輸出“We%20are%20happy.”。

請實現一個函式,把字串中的每個空格替換成“%20”。例如輸入“We are happy.”,則輸出“We%20are%20happy.”。在劍指offer中有這樣一道題目,我已經既不清楚了,我記得該題好像不準使用輔助空間,需要在遠字串上進行操作,如果在java中,直接用re

實現一個函式字串中的每個空格替換“%20”例如輸入 “We are Happly。” 則輸出“we%20are%20happy。”

請實現一個函式,把字串中的每個空格替換成“%20”,例如輸入 “We are Happly。”  則輸出“we%20are%20happy。” void ReplaceBlank(char String[],int length) {  //originalLength

字串替換空格:請實現一個函式字元陣列中的每個空格替換“%20”

例如輸入“we are happy”,則輸出“we%20are%20happy” 想要實現這個目的,先觀察下面的函式實現原理圖。 先通過遍歷字元陣列,找出其中的空格數,計算出應該移動到的位置,接著就

【劍指offer】請實現一個函式一個字串中的每個空格替換

劍指offer 題目如下 請實現一個函式,將一個字串中的每個空格替換成"%20"。 例如,當字串為We Are Happy, 則經過替換後的字串為 We%20Are%20Happy。 具體的程式碼實現如下 1.遍歷實現 public class Solution {

實現一個函式一個字串中的每個空格替換指定符號。

題目描述 請實現一個函式,將一個字串中的每個空格替換成“%20”。例如,當字串為We Are Happy.則經過替換之後的字串為We%20Are%20Happy。 /* 思路:從前向後記錄‘ ’數目,從後向前替換‘ ’。 重點:從後向前替換的時候的技巧 例如:“we are lucky”

java 劍指offer 第二題:請實現一個函式一個字串中的空格替換“%20”。例如字串為We Are Happy.則經過替換之後的字串為We%20Are%20Happy。

** public class Solution { public String replaceSpace(StringBuffer str) { 首先程式給出的引數是StringBuffer類,那麼我首先考慮的是就呼叫StringBuffer類的相關方法完成操作。

一個好用的函式 wcstoul:CString包含的字串轉換整數

Convert strings to an unsigned long-integer value.   unsigned long wcstoul( const wchar_t *nptr, wchar_t **endptr, int base );

刷題 編寫一個函式給出可以轉換的不同字串的個數。

題目: 將給定的數轉換為字串,原則如下:1對應 a,2對應b,…..26對應z,例如12258可以轉換為"abbeh", "aveh", "abyh", "lbeh" and "lyh",個數為5,編寫一個函式,給出可以轉換的不同字串的個數。 這是第二課第三題 兩種解法:暴力遞迴和動態規

.編寫一個函式一個數字字串轉換字串對應的數字

/* 編寫一個函式,將一個數字字串轉換成該字串對應的數字(包括正整數、負整數) 例如:“12“ 返回12 “-123“ 返回-123 函式原型:int my_atof(char *str){

【C語言】編寫一個函式一個數字字串轉換這個字串對應的數字(包括正浮點數、負浮點數)

//編寫一個函式,將一個數字字串轉換成這個字串對應的數字(包括正浮點數、負浮點數) //例如:“12.34“ 返回12.34. " -12.34" 返回12.34 #include<

8.7 有一字串包含n個字元。寫一個函式將此字串從第 m個字元開始的全部字元複製成為另一個字串

8.7 有一字串,包含n個字元。寫一個函式,將此字串從第 m個字元開始的全部字元複製成為另一個字串。個人程式碼如下:#include<stdio.h> #include<string.

6-3 簡單求和(10 分) 本題要求實現一個函式求給定的N個整數的和。

int Sum ( int List[], int N ){  int sum=0;  for(int i=0;i<N;i++)  {    sum+=List[i];  }  return sum;}list的L大寫還有N,就醬。

劍指offer系列(十七)求1+2+3+...+n不用加減乘除做加法字串轉換整數

求1+2+3+...+n 題目描述 求1+2+3+...+n,要求不能使用乘除法、for、while、if、else、switch、case等關鍵字及條件判斷語句(A?B:C)。 解題思路: 法一:利用python的特性 法二:用兩個函式,一個遞迴,另一個終止遞迴。如果對n連續進