首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計綜合問答

C# 字符串求和:「1234」→ 1+2+3+4=10 的多種實現方式

     編輯:程式設計綜合問答

題目

給定字符串 a = "1234" 或 a = "1+2+3+4",計算各位數字之和。

方案一:LINQ 一行流 (推薦 .NET 3.5+)

string a = "1234";
int sum = a.Where(char.IsDigit).Sum(c => c - '0');
// sum = 10

優點:自動過濾非數字字符(如 "+"),代碼極簡。

方案二:foreach 經典寫法

string a = "1234";
int sum = 0;
foreach (char c in a)
{
    if (char.IsDigit(c))
        sum += c - '0';
}

方案三:Split + Parse (針對 "1+2+3+4" 格式)

string a = "1+2+3+4";
int sum = a.Split('+')           // 分割為 ["1","2","3","4"]
           .Select(int.Parse)    // 轉為 int
           .Sum();               // 求和

方案四:正則提取數字 (通用性最強)

using System.Text.RegularExpressions;

string a = "1+2+3+4";
int sum = Regex.Matches(a, @"\d+")      // 匹配所有連續數字
               .Cast<Match>()
               .Sum(m => int.Parse(m.Value));

原始回答的問題分析

原回答代碼:

string[] arry = da.Split(','); // 實際應按 '+' 分割
int? sum = 0;
for (int i = 1; i < arry.Length; i++) // 索引應從 0 開始
    sum = sum + int.Parse(arry[i]);
  • 分割符錯誤:題目是 "+" 而非 ","
  • 索引從 1 開始會漏掉第一個數字
  • int? 可空類型此處無必要

性能對比 (百萬次循環)

方法耗時 (ms)備註
foreach + char.IsDigit~15最快,無分配
LINQ Where+Sum~25委託開銷略大
Split+Select+Sum~120分配數組/字符串
Regex~300正則引擎開銷大

最佳實踐建議

  • 純數字字符串 → foreach (c) sum += c - '0'
  • 含分隔符 → Split + Sum 可讀性最好
  • 複雜格式/混雜字符 → 正則或手寫狀態機
  • 避免 int.Parse("") 拋異常,先 int.TryParse 或 char.IsDigit 守衛

選對工具,讓字符串求和既優雅又高效。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved