0Pricing
C++ Academy · บทเรียน

การแปลงข้อความ: to_string และ stoi

แปลงระหว่างข้อความกับชนิดข้อมูลตัวเลขอย่างปลอดภัยด้วย std::to_string, std::stoi และ std::stod

การแปลงข้อความ: to_string และ stoi เป็นบทเรียน C++ Academy ฟรีบน CoddyKit นี่คือบทเรียนที่ 4 จากทั้งหมด 4 บทเรียน คุณสามารถอ่านบทเรียนทั้งหมดด้านล่างฟรี — จากนั้นลองปฏิบัติด้วยตัวคุณเองในเบราว์เซอร์พร้อมตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7 บทเรียนนี้เป็นส่วนหนึ่งของเส้นทางการเรียน C++ Academy และความก้าวหน้าของคุณจะซิงค์ข้ามเว็บและแอป CoddyKit คอร์ส C++ Academy มีบทเรียนทั้งหมด 4 บทเรียน

เหตุใดการแปลงสตริงจึงสำคัญ

คุณจำเป็นต้องแปลงระหว่างตัวเลขกับข้อความอยู่เสมอ ไม่ว่าจะเป็นข้อมูลขาเข้าของผู้ใช้ ไฟล์การกำหนดค่า JSON, URL และบันทึกการทำงาน

std::to_string

std::to_string แปลงชนิดข้อมูลตัวเลขพื้นฐานใด ๆ เป็นสตริง โดยใช้การจัดรูปแบบเริ่มต้น

#include <string>

std::string a = std::to_string(42);     // "42"
std::string b = std::to_string(-7);     // "-7"
std::string c = std::to_string(3.14);   // "3.140000"

การจัดรูปแบบเลขทศนิยมเริ่มต้น

to_string ที่ใช้กับ double จะแสดงตำแหน่งทศนิยม 6 ตำแหน่ง หากต้องการควบคุมอย่างละเอียด ให้ใช้ std::stringstream ร่วมกับ std::fixed และ std::setprecision หรือใช้ std::format ใน C++20

std::stoi: แปลงสตริงเป็น int

แยกวิเคราะห์จำนวนเต็มด้วย std::stoi คำสั่งนี้จะข้ามช่องว่างนำหน้าและหยุดที่อักขระตัวแรกที่ไม่ใช่ตัวเลข

int n = std::stoi("42");        // 42
int m = std::stoi("  -7abc");   // -7 (stops at 'a')

อ่านตำแหน่งสิ้นสุด

ส่งตัวชี้เพื่อรับดัชนีที่การแยกวิเคราะห์หยุดลง ซึ่งมีประโยชน์สำหรับการแยกวิเคราะห์สตริงที่มีข้อมูลหลายรูปแบบ

std::string s = "42px";
size_t pos;
int n = std::stoi(s, &pos);
std::cout << pos;  // 2  (parsed "42", stopped at 'p')

Stoi แจ้งข้อผิดพลาดเมื่อข้อมูลขาเข้าไม่ถูกต้อง

หากไม่พบตัวเลข stoi จะแจ้งข้อยกเว้น std::invalid_argument หากตัวเลขมีค่ามากเกินช่วงที่รองรับ จะแจ้งข้อยกเว้น std::out_of_range

try {
    int x = std::stoi("not_a_number");
} catch (const std::invalid_argument& e) {
    std::cout << "Parse failed";
}

การแปลงฐานตัวเลข

อาร์กิวเมนต์ตัวที่สามใช้เลือกฐานตัวเลข (2-36) หากส่งค่า 0 ระบบจะตรวจหาฐานจากคำนำหน้าโดยอัตโนมัติ

int hex = std::stoi("ff", nullptr, 16);    // 255
int bin = std::stoi("1010", nullptr, 2);   // 10
int auto_detect = std::stoi("0xff", nullptr, 0); // 255

stol stoll stoul stoull

รูปแบบสำหรับชนิดข้อมูลจำนวนเต็มอื่น ๆ:

  • std::stol — long
  • std::stoll — long long
  • std::stoul — unsigned long
  • std::stoull — unsigned long long

stof stod stold

รูปแบบสำหรับเลขทศนิยมชนิด float, double และ long double

double d = std::stod("3.14159");
float f = std::stof("2.71");

C++17 std::from_chars: ไม่โยนข้อยกเว้น

std::from_chars แยกวิเคราะห์ข้อมูลโดยไม่โยนข้อยกเว้น โดยส่งคืนโครงสร้างที่มี ec (รหัสข้อผิดพลาด) และ ptr (ตำแหน่งสิ้นสุดการแยกวิเคราะห์) จึงเหมาะสำหรับลูปที่ทำงานบ่อย

#include <charconv>
std::string s = "42";
int val;
auto result = std::from_chars(s.data(), s.data() + s.size(), val);
if (result.ec == std::errc{}) {
    // success
}

C++17 std::to_chars: ไม่จองหน่วยความจำ

เป็นการทำงานย้อนกลับของ from_chars โดยเขียนตัวเลขลงในบัฟเฟอร์โดยไม่จองหน่วยความจำ ถือเป็นการแปลงที่เร็วที่สุดที่มีในไลบรารีมาตรฐาน

ตรวจสอบอย่างรวดเร็ว

std::stoi("abc") แจ้งข้อยกเว้นใด

ทบทวน

std::to_string แปลงตัวเลขเป็นสตริง ส่วน std::stoi และคำสั่งที่เกี่ยวข้องใช้แยกวิเคราะห์สตริงเป็นตัวเลข ทั้งสองแบบจะแจ้งข้อผิดพลาดเมื่อทำงานล้มเหลว หากต้องการแยกวิเคราะห์ประสิทธิภาพสูงโดยไม่โยนข้อยกเว้น ให้ใช้ std::from_chars

คำถามที่พบบ่อย

บทเรียน “การแปลงข้อความ: to_string และ stoi” ฟรีหรือไม่

ใช่ — ข้อความเต็มของ “การแปลงข้อความ: to_string และ stoi” ฟรีให้อ่านที่นี่บนเว็บ เพื่อปฏิบัติแบบโต้ตอบ (ตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7) และปลดล็อคส่วนที่เหลือของคอร์ส C++ Academy ให้อัปเกรดเป็น CoddyKit PRO คอร์ส C++ Academy มีบทเรียนทั้งหมด 4 บทเรียน

คุณจะเรียนรู้อะไรในบทเรียน “การแปลงข้อความ: to_string และ stoi”

แปลงระหว่างข้อความกับชนิดข้อมูลตัวเลขอย่างปลอดภัยด้วย std::to_string, std::stoi และ std::stod คุณปฏิบัติ C++ Academy ด้วยโค้ดที่ใช้งานได้จริงที่คุณเรียกใช้โดยตรงในเบราว์เซอร์ และติวเตอร์ AI ตลอด 24/7 ตอบคำถามของคุณขณะที่คุณไปผ่านบทเรียน

คุณต้องมีประสบการณ์ก่อนที่จะเริ่มเรียน C++ Academy หรือไม่

ไม่จำเป็นต้องมีประสบการณ์มาก่อน C++ Academy บน CoddyKit ออกแบบมาสำหรับผู้เริ่มต้นไปจนถึงผู้เรียนขั้นสูง คุณสามารถเริ่มต้นที่นี่หรือเริ่มจากตัวแรกและเรียนด้วยความเร็วของคุณเอง นี่คือบทเรียนที่ 4 จากทั้งหมด 4 บทเรียน

บทเรียน “การแปลงข้อความ: to_string และ stoi” ใช้เวลานานแค่ไหน

บทเรียน CoddyKit ส่วนใหญ่ใช้เวลาประมาณ 5–10 นาที แต่ละบทเรียนจึงสั้นและเป็นแบบโต้ตอบ คุณสามารถก้าวหน้าอย่างต่อเนื่องและกลับมาเรียนต่อจากตรงที่เพิ่งหยุดบนเว็บและแอปได้เลย

ฉันเขียนและรันโค้ดในบทเรียน C++ Academy นี้ได้ไหม

ได้ บทเรียน C++ Academy ทุกบทมีตัวแก้ไขโค้ดในตัว คุณจึงเขียนและรันโค้ดจริงได้เลยในเบราว์เซอร์ และได้รับข้อเสนอแนะจาก AI ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ

บทเรียนทั้งหมดในหลักสูตรนี้

  1. std::string เทียบกับอาร์เรย์อักขระแบบ C
  2. การดำเนินการกับข้อความ: ต่อ แบ่ง ค้นหา แทนที่
  3. สตรีมข้อความ stringstream สำหรับการแยกวิเคราะห์
  4. การแปลงข้อความ: to_string และ stoi
← กลับไปที่ C++ Academy