2015-09-04 99 views
-2

今天我收到了這個採訪問題。有人可以幫我解決這個問題嗎?隨機字符串的整數之和

/** 
* Return the sum of all integers from a random string. Continuous Integers must be considered as one number. 
* Given the following inputs, we expect the corresponding output: 
* 
* "1a2b3c" ==>6 (1+2+3) 
* "123ab!45c" ==> 168 (123+45) 
* "abcdef" ==> 0 (no integers in String) 
* "0123.4" ==> 127 () 
* "dFD$#[email protected]#T1234;/..10" => 1279 (23+12+1234+10) 
* "12a-10b" => 2 (12-10) 
*/ 

private static long SumOfNumbers (String str){ 
    return null; 
+1

你是怎樣嘗試去解決呢?你在哪裏被封鎖? – Codebender

+1

也許一個'Scanner'可以幫忙,或者一個正則表達式來分割'String'或一個'for-loop' .... – MadProgrammer

+0

可能重複 - http://stackoverflow.com/questions/28227772/return-the- sum-of-all-integers-from-a-random-string-without-using-regex –

回答

0

當您還沒有嘗試過任何研究時,我們無法爲您提供整體解決方案。但就如何解決一個提示,

  • 用掃描儀讀取輸入
  • 使用正則表達式來讀取輸入

除去非NUMERICS除了數學運算這應該是你的方法你應該做什麼。然後是你如何做到這一點。嘗試您的研究,然後在出現技術困難的情況下發布問題。

0

您可以逐個字符地完成此操作,只需累積數字(和符號)並在檢測到數字結尾時將它們相加即可。

算法會去是這樣的:

set sign to 1. 
set total to 0. 
set accum to 0. 
for each character: 
    if character is digit: 
     accum = accum * 10 + value(character) 
    elif accum > 0: 
     total = total + sign * accum 
     accum = 0 
     if character is '-': 
      sign = -1 
     else: 
      sign = 1 
    else: 
     if character is '-': 
      sign = -sign 

if accum > 0: 
    total = total + sign * accum 

基本上,如果你得到一個數字,你將它添加到累加器(這是用來創建當前號碼)。

每當您找到一個非零數字並帶有非零累加器時,您將該累加器添加到總數中,並根據當前字符是否爲-或其他設置(但不能是數字在這點)。

如果你在累加器非數字並沒有什麼,你就必須把-標誌作爲一種特殊情況,以便收拾東西像--1010

最後,您再次添加一個非零累加器來考慮您可能會結束的數字。

0

試試下面的代碼

private static long SumOfNumbers(String str) { 
    int digit = 0, number = 0; 
    long sum = 0; 
    // Iterate through each character in the input string 
    for (int i = 0; i < str.length(); i++) { 

     // Convert the character to integer 
     digit = Integer.valueOf(str.charAt(i)) - '0'; 

     // Check if the character is a integer 
     // add the digits till a non-integer is encountered 
     if (digit >= 0 && digit <= 9) { 
      number = number * 10 + digit; 
     } else { 
      sum += number; 
      number = 0; 
     } 
    } 
    sum += number; 
    return sum; 
} 
+0

這是一個很好的*開始*,但不會處理負數如最後一種情況「12a-10b」=> 2(12-10)', – paxdiablo