การแปลงข้อความ: 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); // 255stol stoll stoul stoull
รูปแบบสำหรับชนิดข้อมูลจำนวนเต็มอื่น ๆ:
std::stol— longstd::stoll— long longstd::stoul— unsigned longstd::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 ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ
บทเรียนทั้งหมดในหลักสูตรนี้
- std::string เทียบกับอาร์เรย์อักขระแบบ C
- การดำเนินการกับข้อความ: ต่อ แบ่ง ค้นหา แทนที่
- สตรีมข้อความ stringstream สำหรับการแยกวิเคราะห์
- การแปลงข้อความ: to_string และ stoi