คำถามติดแท็ก strings

"สตริง" คือลำดับของอักขระโดยทั่วไปแสดงถึงหน่วยของข้อความที่มนุษย์อ่านได้ คำถามในหัวข้อนี้จะจัดการกับสตริงการประมวลผลในโปรแกรมและวิธีการที่ภาษาและสภาพแวดล้อมต่างๆกำหนดและจัดการสตริง

1
PHP แสดงสตริงภายในได้อย่างไร
UTF8? UTF16? สตริงใน PHP ติดตามการเข้ารหัสที่ใช้หรือไม่ ลองดูตัวอย่างสคริปต์นี้ พูดว่าฉันวิ่ง: $original = "शक्नोम्यत्तुम्"; เกิดอะไรขึ้นจริงหรือ เห็นได้ชัดว่าฉันคิดว่า$originalจะไม่มีเพียง 7 ตัวอักษร ร่ายมนตร์เหล่านั้นจะต้องถูกแทนด้วยหลายไบต์ที่นั่น จากนั้นฉันก็: $converted = mb_convert_encoding ($original , "UTF-8"); จะเกิดอะไรขึ้น$converted? จะ$convertedแตกต่างจาก$originalอย่างไร มันจะเป็นเพียงลำดับไบต์ที่แน่นอนเหมือนกัน$originalแต่มีการเข้ารหัสที่แตกต่างกันหรือไม่?
18 php  strings 

3
จำนวนสตริงที่ถูกสร้างในหน่วยความจำเมื่อเชื่อมสตริงใน Java?
ฉันถูกถามเกี่ยวกับสตริงที่ไม่เปลี่ยนรูปแบบใน Java ฉันถูกมอบหมายให้เขียนฟังก์ชั่นที่เชื่อมจำนวน "a" เข้ากับสตริง สิ่งที่ฉันเขียน: public String foo(int n) { String s = ""; for (int i = 0; i < n; i++) { s = s + "a" } return s; } ฉันถูกถามแล้วว่าจะสร้างโปรแกรมจำนวนเท่าใดสตริงโดยสมมติว่าการรวบรวมขยะไม่ได้เกิดขึ้น ความคิดของฉันสำหรับ n = 3 คือ "" "A" "A" "AA" "A" "AAA" "A" โดยพื้นฐานแล้วจะมีการสร้างสตริง 2 สายในการวนซ้ำแต่ละรอบ …
17 java  strings  object 

3
เมื่อใดที่ฉันควรใช้ string_view ในอินเทอร์เฟซ
ฉันใช้ห้องสมุดภายในที่ถูกออกแบบมาเพื่อเลียนแบบเสนอห้องสมุด C ++และในช่วงไม่กี่ปีที่ผ่านมาผมเห็นอินเตอร์เฟซที่เปลี่ยนจากการใช้เพื่อstd::stringstring_view ดังนั้นฉันจึงเปลี่ยนรหัสตามหน้าที่ให้สอดคล้องกับอินเทอร์เฟซใหม่ น่าเสียดายที่สิ่งที่ฉันต้องผ่านคือพารามิเตอร์ std :: string และสิ่งที่เป็นค่าส่งคืน std :: string ดังนั้นรหัสของฉันเปลี่ยนจากสิ่งนี้: void one_time_setup(const std::string & p1, int p2) { api_class api; api.setup (p1, special_number_to_string(p2)); } ถึง void one_time_setup(const std::string & p1, int p2) { api_class api; const std::string p2_storage(special_number_to_string(p2)); api.setup (string_view(&p1[0], p1.size()), string_view(&p2_storage[0], p2_storage.size())); } ฉันจริงๆไม่เห็นสิ่งที่เปลี่ยนแปลงนี้ซื้อฉันเป็นลูกค้าของ API นอกเหนือจากรหัสอื่น …

3
เป็นไปได้หรือไม่ที่จะเขียนฟังก์ชั่นย้อนกลับของสตริงทั่วไปที่เหมาะกับการแปลท้องถิ่นและประเภทสตริงทั้งหมด?
ฉันแค่ดูการนำเสนอJon Skeet (กับ Tony the Pony) จาก Dev-Days ถึงแม้ว่า "ฟังก์ชั่นเขียนกลับสตริง" กำลังเขียนรหัสสัมภาษณ์ 101 - ฉันไม่แน่ใจว่าจริง ๆ แล้วมันเป็นไปได้ที่จะเขียนฟังก์ชั่นย้อนกลับของสตริงทั่วไปแน่นอนไม่ได้หนึ่งที่ทำงานในท้องถิ่นทั้งหมดและทุกประเภทสตริง นอกเหนือจากการตรวจสอบว่าสตริงอินพุตคือ ascii, UTF8, UTF16 (ความยาวคงที่และผันแปร) เป็นต้น มี 'ใช้การเน้นเสียงกับอักขระถัดไป' (U + 0301) รหัสที่จอนเน้นไว้ จากนั้นจะมีลิ้นที่อาจแสดงหรือไม่แสดงหรือเข้ารหัสเป็นอักขระคู่ ดูเหมือนว่า "การย้อนกลับสตริง" เป็นหนึ่งในงานด้านวิทยาศาสตร์คอมพิวเตอร์ที่ยากขึ้น!

7
ฟังก์ชันของไลบรารี C ควรคาดหวังความยาวของสตริงหรือไม่?
ขณะนี้ฉันกำลังทำงานกับไลบรารีที่เขียนเป็น C ฟังก์ชันจำนวนมากของไลบรารีนี้คาดว่าจะมีสตริงเป็นchar*หรือconst char*ในอาร์กิวเมนต์ ฉันเริ่มต้นด้วยฟังก์ชั่นเหล่านั้นมักจะคาดหวังความยาวของสตริงsize_tเพื่อไม่ให้มีการยกเลิกค่า null อย่างไรก็ตามเมื่อเขียนการทดสอบสิ่งนี้ส่งผลให้มีการใช้งานบ่อยstrlen()เช่น: const char* string = "Ugh, strlen is tedious"; libFunction(string, strlen(string)); การวางใจให้ผู้ใช้ส่งผ่านสายอักขระที่ถูกยกเลิกอย่างถูกต้องจะนำไปสู่ความปลอดภัยที่น้อยลง แต่มีความรัดกุมมากกว่าและ (ในความคิดของฉัน) รหัสที่อ่านได้: libFunction("I hope there's a null-terminator there!"); ดังนั้นการปฏิบัติที่เหมาะสมที่นี่คืออะไร? ทำให้ API มีความซับซ้อนมากขึ้นในการใช้งาน แต่บังคับให้ผู้ใช้นึกถึงการป้อนข้อมูลหรือบันทึกข้อกำหนดสำหรับสตริงที่สิ้นสุดด้วยค่า null และเชื่อใจผู้โทร
15 c  api  strings 

16
คุณใช้การย้อนกลับสตริงเพื่ออะไร [ปิด]
ตามที่เป็นอยู่ในปัจจุบันคำถามนี้ไม่เหมาะสำหรับรูปแบบคำถาม & คำตอบของเรา เราคาดหวังคำตอบที่จะได้รับการสนับสนุนจากข้อเท็จจริงการอ้างอิงหรือความเชี่ยวชาญ แต่คำถามนี้อาจเรียกร้องให้มีการถกเถียงอภิปรายโต้แย้งหรือการอภิปรายเพิ่มเติม หากคุณรู้สึกว่าคำถามนี้สามารถปรับปรุงและเปิดใหม่ได้โปรดไปที่ศูนย์ช่วยเหลือเพื่อขอคำแนะนำ ปิดให้บริการใน6 ปีที่ผ่านมา ใน PHP เป็นของstrrev()Rails .reverseแต่ภาษาส่วนใหญ่ไม่มีฟังก์ชั่นการย้อนกลับสตริง บางคนมีฟังก์ชั่นย้อนกลับอาร์เรย์ที่สามารถใช้กับตัวละคร ฉันคิดว่ามันต้องเป็นการกำกับดูแลที่สำคัญ แต่แล้วมันก็เกิดขึ้นกับฉันคุณจะใช้สายอักขระย้อนกลับเพื่ออะไร ครั้งเดียวที่ฉันคิดได้ว่าฉันได้เห็นมันเป็นการสาธิตและบทเรียนเพื่อเปลี่ยน "Hello World!" เป็น "! dlroW olleH" คำถามของฉันคือ; มีการใช้สำหรับการย้อนกลับสตริงหรือมันไม่มีจุดหมายอย่างสมบูรณ์? . ภาคผนวก มีคำตอบเพิ่มเติมที่ฉันคาดไว้และไม่ใช่ทั้งหมดที่เป็นวิชาการ ฉันจะใส่เงินที่ไม่มีใครสามารถมาด้วยตัวอย่างที่ถูกกฎหมาย ฉันก็ไม่คิดว่าฉันจะได้เรียนรู้อะไรใหม่ ๆ แต่คำแนะนำ regex ของ Mark Canlas นั้นยอดเยี่ยมมากและฉันหวังว่าจะได้มีโอกาสพิสูจน์มัน ขอบคุณทุกคน.

1
เหตุใดอักขระเครื่องหมายวรรคตอนในตาราง ASCII ทั่วทุกที่
ในตาราง ASCII อักขระเครื่องหมายวรรคตอนจะปรากฏขึ้นระหว่างอักขระที่ไม่ได้พิมพ์และก่อนหน้าตัวเลข ( !"#$%&')*+,-./) ระหว่างตัวเลขและตัวอักษรตัวพิมพ์ใหญ่ ( :;<=>?@) ระหว่างตัวอักษรตัวพิมพ์ใหญ่ ( [\]^_`) และตัวอักษรตัวพิมพ์เล็กและหลังตัวอักษรตัวเล็ก ( {|}~) เมื่อมองแวบแรกใครจะคาดหวังว่าสิ่งเหล่านี้จะรวมกลุ่มกัน อาจเป็นได้ทั้งก่อนหน้าตัวอักษรและตัวเลขทั้งหมดหรือด้านหลัง แต่นี่ไม่ใช่กรณี; พวกเขาสนใจในกลุ่มต่าง ๆ เหล่านี้ เหตุใดจึงเป็นเช่นนี้ มีเหตุผลทางประวัติศาสตร์บ้างหรือไม่ที่ทำให้ตัวละครถูกจัดกลุ่มด้วยวิธีนี้?
13 strings  ascii 

2
เมื่อใดที่ฉันควรใช้ StringBuilder หรือ StringBuffer
ในเว็บแอปพลิเคชั่นการผลิตโปรแกรมเมอร์เพื่อนของฉันใช้ StringBuffer ทุกที่ ตอนนี้ฉันกำลังดูแลการพัฒนาแอพพลิเคชั่นและการแก้ไข หลังจากอ่านStringBuilderและStringBufferฉันได้ตัดสินใจเปลี่ยนรหัส StringBuffer ทั้งหมดด้วย StringBuilder เพราะเราไม่ต้องการความปลอดภัยของเธรดใน data beans ของเรา ตัวอย่างเช่น: (ในแต่ละ data bean ฉันสามารถเห็นการใช้งานของ StringBuffer) @Override public String toString() { StringBuffer sb = new StringBuffer();// replace it from StringBuilder sb.append(" ABCD : ").append(abcd); sb.append(", EFGH : ").append(efgh); sb.append(", IJKL : ").append(ijkl); } เราสร้าง data beans แยกต่างหากสำหรับแต่ละเซสชั่น / …

3
เราสามารถคาดหวังประสิทธิภาพอะไรได้บ้างจาก std :: string's c_str () เวลาคงที่เสมอหรือไม่
ฉันได้ทำการปรับปรุงบางอย่างที่จำเป็นเมื่อเร็ว ๆ นี้ สิ่งหนึ่งที่ฉันทำคือการเปลี่ยน ostringstreams -> sprintfs ฉันกำลังรีบพวงของ std :: strings ไปที่ array style ac, ala char foo[500]; sprintf(foo, "%s+%s", str1.c_str(), str2.c_str()); ปรากฎว่าการใช้งาน std :: string :: c_str () ของ Microsoft นั้นทำงานในเวลาคงที่ (มันแค่คืนค่าตัวชี้ภายใน) ปรากฏว่าlibstdc ++ ไม่เหมือนกัน ฉันรู้ว่ามาตรฐานไม่รับประกันสำหรับ c_str แต่มันยากที่จะจินตนาการถึงวิธีการทำเช่นนี้อีก ตัวอย่างเช่นหากพวกเขาคัดลอกไปยังหน่วยความจำพวกเขาอาจต้องจัดสรรหน่วยความจำสำหรับบัฟเฟอร์ (ปล่อยให้มันขึ้นอยู่กับผู้เรียกที่จะทำลายมัน - ไม่ใช่ส่วนหนึ่งของสัญญา STL) หรือพวกเขาจะต้องคัดลอกไปยังคงที่ภายใน บัฟเฟอร์ (อาจไม่ใช่ threadsafe และคุณไม่มีการรับประกันตลอดอายุการใช้งาน) ดังนั้นเพียงแค่คืนค่าพอยน์เตอร์ไปยังสตริงที่สิ้นสุดด้วยค่า …

8
สตริง C ถูกยกเลิกเป็นโมฆะเสมอหรือขึ้นอยู่กับแพลตฟอร์มหรือไม่
ตอนนี้ฉันกำลังทำงานกับระบบฝังตัวและหาวิธีที่จะใช้สตริงในไมโครโปรเซสเซอร์ที่ไม่มีระบบปฏิบัติการ จนถึงตอนนี้สิ่งที่ฉันทำคือการใช้ความคิดของการมีตัวชี้ NULL สิ้นสุดตัวอักษรและปฏิบัติต่อพวกเขาเป็นสตริงที่ NULL หมายถึงจุดสิ้นสุด ฉันรู้ว่านี่เป็นเรื่องธรรมดา แต่คุณสามารถเสมอนับเกี่ยวกับเรื่องนี้จะเป็นกรณีที่? เหตุผลที่ฉันถามคือฉันกำลังคิดว่าอาจจะใช้ระบบปฏิบัติการแบบเรียลไทม์ในบางจุดและฉันต้องการใช้รหัสปัจจุบันของฉันให้มากที่สุด ดังนั้นสำหรับตัวเลือกต่าง ๆ ที่อยู่ข้างนอกฉันจะคาดหวังได้ไหมว่าสตริงจะทำงานเหมือนกันหรือไม่? ให้ฉันเจาะจงมากขึ้นสำหรับกรณีของฉัน ฉันกำลังใช้ระบบที่ใช้และประมวลผลคำสั่งผ่านพอร์ตอนุกรม ฉันสามารถรักษารหัสการประมวลผลคำสั่งของฉันไว้เหมือนกันได้หรือไม่แล้วคาดว่าวัตถุสตริงที่สร้างขึ้นบน RTOS (ซึ่งมีคำสั่ง) ทั้งหมดนี้จะถูกยกเลิกเป็น NULL หรือไม่ หรือว่ามันจะแตกต่างกันไปตามระบบปฏิบัติการหรือไม่ ปรับปรุง หลังจากได้รับคำแนะนำให้ดูคำถามนี้ฉันตัดสินใจแล้วว่าไม่ตอบคำถามที่ฉันขอ คำถามก็คือการถามว่าความยาวของสตริงควรส่งผ่านซึ่งแตกต่างอย่างสิ้นเชิงกับสิ่งที่ฉันถามหรือไม่และถึงแม้ว่าคำตอบบางส่วนจะมีข้อมูลที่เป็นประโยชน์ในพวกเขาพวกเขาไม่ใช่สิ่งที่ฉันกำลังมองหา คำตอบที่ดูเหมือนจะให้เหตุผลว่าทำไมหรือทำไมไม่ยุติสตริงด้วยอักขระ null ความแตกต่างกับสิ่งที่ฉันถามคือถ้าฉันสามารถคาดหวังมากขึ้นหรือน้อยลงสตริงที่เกิดในแพลตฟอร์มที่แตกต่างกันเพื่อยุติสตริงของตัวเองด้วย null โดยไม่ต้องออกไปข้างนอกและลองทุกแพลตฟอร์มเดียวถ้ามันสมเหตุสมผล

4
struct ด้วยค่าเริ่มต้นที่ไร้สาระ
ในระบบของฉันฉันมักทำงานกับรหัสสนามบิน ( "YYZ", "LAX", "SFO"ฯลฯ ) พวกเขามักจะอยู่ในรูปแบบเดียวกันแน่นอน (3 ตัวอักษรแสดงเป็นตัวพิมพ์ใหญ่) โดยทั่วไประบบจะจัดการกับ 25-50 ของรหัส (ต่างกัน) ต่อคำขอ API ด้วยการจัดสรรรวมกว่าพันรายการระบบจะส่งผ่านแอปพลิเคชันของเราหลายเลเยอร์และเปรียบเทียบกับความเท่าเทียมกันบ่อยครั้ง เราเริ่มต้นด้วยการส่งสายไปรอบ ๆ ซึ่งใช้งานได้ดี แต่เราก็สังเกตเห็นข้อผิดพลาดในการเขียนโปรแกรมจำนวนมากได้อย่างรวดเร็วโดยการส่งรหัสผิดไปที่ไหนสักแห่งคาดว่ารหัส 3 หลัก นอกจากนี้เรายังพบปัญหาที่เราควรทำการเปรียบเทียบแบบตัวพิมพ์เล็กและตัวพิมพ์ใหญ่ แต่ไม่ได้ทำให้เกิดข้อบกพร่อง จากนี้ฉันตัดสินใจที่จะหยุดการส่งผ่านสายไปรอบ ๆ และสร้างAirportชั้นเรียนซึ่งมีตัวสร้างเดียวที่ใช้และตรวจสอบรหัสสนามบิน public sealed class Airport { public Airport(string code) { if (code == null) { throw new ArgumentNullException(nameof(code)); } if (code.Length != 3 || …

2
ทำไม PHP จึงถือว่า“ 0” เป็น FALSE ในบริบทบูลีน
"0" ซึ่งเป็นสตริงที่มีอักขระหนึ่งตัวไม่ใช่สิ่งที่ว่างเปล่าอย่างสังหรณ์ใจ ทำไม PHP จึงถือว่าเป็น FALSE เมื่อถูกแปลงเป็นบูลีนซึ่งแตกต่างจากภาษาการเขียนโปรแกรมอื่น ๆ
12 php  strings  boolean 

5
คุณบีบอัดสตริง ASCII เป็นไบต์ที่น้อยลงได้อย่างไร
ฉันทำงานกับอุปกรณ์ฝังตัวที่มีโปรโตคอลเฉพาะที่ส่งข้อความไปยังอุปกรณ์อื่นและฉันกำลังสร้างแอปพลิเคชันที่แยกวิเคราะห์แพ็คเก็ตที่ส่ง แต่ละแพ็คเก็ตมีขนาด 8 ไบต์ โพรโทคอลถูกกำหนดเป็นโดยที่ไบต์แรกเป็นส่วนหัวและ 7 ไบต์ที่เหลือคือข้อมูล พวกเขาพยายามที่จะส่งสตริง ID เฉพาะ แต่สตริง ID ยาว 8 อักขระ (ASCII) ดังนั้นมันจะไม่พอดีกับ 7 ไบต์ สิ่งที่เพื่อนร่วมงานของฉันบอกฉันคือพวกเขากำลังจะเปลี่ยน 8 ไบต์ ASCII ของสตริงเดิมเป็นจำนวนเต็ม (ทศนิยม) และส่งให้ฉัน 4 ไบต์ พวกเขาบอกฉันว่าฉันควรจะได้รับสายดั้งเดิมจาก 4 ไบต์ ฉันมีปัญหาเวลาปิดหัวของฉันรอบนี้ ดังนั้นถ้าคุณมีสตริง ID เช่น "IO123456" นั่นคือ 0x49 0x4f 0x31 0x32 0x33 0x34 0x35 0x35 0x36 ใน ASCII .. คุณจะบีบอัดมันใน …
12 strings  ascii  byte 

1
Shortest Common Superstring: ค้นหาสตริงที่สั้นที่สุดที่มีแฟรกเมนต์สตริงที่กำหนดทั้งหมด
เมื่อกำหนดแฟรกเมนต์สตริงให้ฉันต้องการค้นหาสตริงเดี่ยวสั้นที่สุดเท่าที่จะเป็นไปได้ ("เอาต์พุตสตริง") ที่มีแฟรกเมนต์ทั้งหมด แฟรกเมนต์สามารถทับซ้อนกันในสตริงเอาต์พุต ตัวอย่าง: สำหรับแฟรกเมนต์สตริง: BCDA AGF ABC สตริงเอาต์พุตต่อไปนี้มีแฟรกเมนต์ทั้งหมดและสร้างขึ้นโดยการต่อท้ายแบบไร้เดียงสา: BCDAAGFABC อย่างไรก็ตามสตริงเอาต์พุตนี้ดีกว่า (สั้นกว่า) เนื่องจากมีการซ้อนทับกัน: ABCDAGF ^ ABC ^ BCDA ^ AGF ฉันกำลังมองหาอัลกอริทึมสำหรับปัญหานี้ ไม่สำคัญอย่างยิ่งที่จะต้องค้นหาสตริงเอาต์พุตที่สั้นที่สุด แต่ยิ่งสั้นยิ่งดี ฉันกำลังมองหาอัลกอริทึมที่ดีกว่าแบบไร้เดียงสาที่ชัดเจนซึ่งจะลองต่อท้ายพีชคณิตของอินพุตทั้งหมดและลบการทับซ้อน (ซึ่งดูเหมือนจะเป็น NP-Complete) ฉันเริ่มทำงานกับวิธีแก้ปัญหาและมันพิสูจน์ได้ว่าน่าสนใจมาก ฉันต้องการที่จะเห็นสิ่งที่คนอื่นอาจเกิดขึ้น ฉันจะเพิ่มความคืบหน้าในการทำงานกับคำถามนี้ในอีกสักครู่

6
มันไม่มีประสิทธิภาพที่จะต่อสตริงเข้าทีละตัว?
ฉันจำได้คืนจากวันที่ฉันเขียนโปรแกรมใน C ซึ่งเมื่อมีการรวมสองสายเข้าด้วยกันระบบปฏิบัติการจะต้องจัดสรรหน่วยความจำสำหรับสตริงที่เข้าร่วมจากนั้นโปรแกรมสามารถคัดลอกข้อความสตริงทั้งหมดไปยังพื้นที่ใหม่ในหน่วยความจำ ได้รับการปล่อยตัว ดังนั้นหากทำหลายครั้งเช่นเดียวกับในกรณีที่เข้าร่วมรายการระบบปฏิบัติการจะต้องจัดสรรหน่วยความจำให้มากขึ้นเรื่อย ๆ เพียงเพื่อให้ระบบเปิดตัวหลังจากการเชื่อมต่อครั้งต่อไป วิธีที่ดีกว่าในการทำเช่นนี้ใน C คือการกำหนดขนาดโดยรวมของสตริงที่รวมกันและจัดสรรหน่วยความจำที่จำเป็นสำหรับรายการสตริงที่เข้าร่วมทั้งหมด ตอนนี้ในภาษาการเขียนโปรแกรมสมัยใหม่ (เช่น C #) ฉันมักจะเห็นเนื้อหาของคอลเลกชันที่ถูกรวมเข้าด้วยกันโดยการวนซ้ำผ่านคอลเลกชันและเพิ่มสตริงทั้งหมดครั้งละหนึ่งครั้งเพื่อการอ้างอิงสตริงเดี่ยว สิ่งนี้ไม่มีประสิทธิภาพแม้แต่กับพลังการคำนวณที่ทันสมัย?

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.