กลับไปยังโจทย์
ง่าย 0 ข้อที่แก้แล้ว อัตราผ่าน 0%

รวมเฉพาะตัวเลขที่ถูกต้อง

บวกค่าที่เป็นจำนวนเต็มและข้ามอย่างอื่นไป เหมือนที่ try/except จัดการอินพุตที่ไม่ถูกต้อง.

สิ่งที่คุณจะได้เรียนรู้

  • ข้ามอินพุตที่ผิดแทนที่จะให้โปรแกรมพัง
  • ตัดช่องว่างก่อนแปลงข้อความเป็นตัวเลข
  • รู้จักเครื่องหมายที่ใส่หรือไม่ใส่ก็ได้ตามด้วยตัวเลข

โจทย์

ข้อมูลที่ผู้ใช้พิมพ์มานั้นมักจะรกปนกัน คุณได้รับรายการของสตริงและต้องบวกเฉพาะรายการที่เป็น จำนวนเต็ม โดยไม่สนใจส่วนที่เหลือแทนที่จะทำให้โปรแกรมล้ม

รายการจะนับว่าใช้ได้ถ้าหลังจากตัดช่องว่างที่ต้นและท้ายออกแล้ว มีเครื่องหมาย + หรือ - แบบเลือกมีหรือไม่มีก็ได้ ตามด้วยตัวเลขอย่างน้อยหนึ่งตัว อย่างอื่นทั้งหมด (ข้อความว่าง, ทศนิยมเช่น "2.5", คำ) ให้ข้ามไป

Implement sum_valid_numbers(values).

อินพุต

values: รายการข้อมูลที่จะอ่าน

เอาต์พุต

คืนค่าผลรวมของจำนวนเต็มที่ถูกต้อง (0 ถ้าไม่มีรายการที่ใช้ได้เลย).

เงื่อนไข

0 ≤ จำนวนรายการ ≤ 1,000

แต่ละรายการยาวไม่เกิน 20 อักขระ ตัวเลขที่ถูกต้องอยู่ในช่วงจำนวนเต็ม 64 บิต

ตัวอย่าง

ตัวอย่างที่ 1
อินพุต:
values = ["10", " 5 ", "abc", "-3"]

ผลลัพธ์ที่คาดหวัง:
expected = 12
อินพุต:
std::vector<std::string> values = {"10", " 5 ", "abc", "-3"};

ผลลัพธ์ที่คาดหวัง:
long long expected = 12;
อินพุต:
string[] values = new string[] {"10", " 5 ", "abc", "-3"};

ผลลัพธ์ที่คาดหวัง:
long expected = 12;

คำอธิบาย

"10", " 5 " (ตัดช่องว่างออก) และ "-3" เป็นจำนวนเต็ม ส่วน "abc" ถูกข้าม 10 + 5 - 3 = 12

ตัวอย่างที่ 2
อินพุต:
values = ["2.5", "", "seven"]

ผลลัพธ์ที่คาดหวัง:
expected = 0
อินพุต:
std::vector<std::string> values = {"2.5", "", "seven"};

ผลลัพธ์ที่คาดหวัง:
long long expected = 0;
อินพุต:
string[] values = new string[] {"2.5", "", "seven"};

ผลลัพธ์ที่คาดหวัง:
long expected = 0;

คำอธิบาย

ไม่มีรายการใดเป็นจำนวนเต็ม ผลรวมจึงเป็น 0

แนวทางการแก้

ลองทำเองก่อน แล้วค่อยเปิดคำใบ้ทีละข้อ

คำใบ้ 1

ตัดช่องว่างก่อน แล้วค่อยดูว่าส่วนที่เหลือเป็นจำนวนเต็มที่ถูกต้องหรือไม่

คำใบ้ 2

การแปลงใน try/except (หรือตรวจทีละอักขระ) ช่วยให้ข้ามรายการที่ผิดได้โดยไม่หยุดโปรแกรม

คำใบ้ 3

เครื่องหมายเดี่ยว ๆ อย่าง "+" ไม่ใช่ตัวเลข

ความซับซ้อนที่คาดหวัง

เวลา O(ความยาวรวม), หน่วยความจำเพิ่ม O(1)

แหล่งอ้างอิง

โจทย์นี้ปรับให้เหมาะกับ CodeUtility กรุณาทำตามคำชี้แจงและข้อจำกัดด้านบน

เรียนรู้จากคนอื่น

แนวทางจากชุมชน

ยังไม่มีวิธีทำที่เผยแพร่ ลองแก้โจทย์นี้เพื่อแชร์วิธีแรก