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

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

2
วิธีการเลือกตัวเลือกที่น่าจะเป็นไปได้มากที่สุดจากรายการตามการป้อนข้อความของผู้ใช้
ฉันกำลังทำงานกับแอปพลิเคชัน OCR ที่ฉันต้องเลือกตัวเลือกตามการป้อนข้อความของผู้ใช้ Ex: Available Options: ["python", "ruby", "java", "clojure", "haskell"] Input: kava Output: java Input: ruby Output: ruby Input: clujuro Output: clojure etc.. แอปพลิเคชันของฉันใช้ภาษาไพ ธ อนมีขั้นตอนวิธีแก้ไขปัญหานี้อยู่แล้ว

4
เราควรจะป้องกันได้อย่างไร
เราใช้งานPexมากับโค้ดบางตัวและมันก็แสดงให้เห็นถึงสิ่งที่ดี (สิ่งเลวร้าย แต่แสดงให้พวกเขาเห็นก่อนที่มันจะเริ่มผลิต!) อย่างไรก็ตามหนึ่งในสิ่งที่ดีเกี่ยวกับ Pex คือมันไม่จำเป็นต้องหยุดพยายามค้นหาปัญหา สิ่งหนึ่งที่เราพบคือเมื่อผ่านสตริงเราไม่ได้ตรวจสอบสตริงว่าง ดังนั้นเราจึงเปลี่ยน: if (inputString == null) ถึง if (string.IsNullOrEmpty(inputString)) // *** ที่แก้ไขปัญหาเบื้องต้น แต่เมื่อเราวิ่ง Pex อีกครั้งก็ตัดสินใจว่า inputString = "\0"; ก่อให้เกิดปัญหา และจากนั้น inputString = "\u0001"; สิ่งที่เราได้ตัดสินใจคือสามารถใช้ค่าเริ่มต้นได้หากเราพบ// ***และเรายินดีที่จะเห็นข้อยกเว้นที่เกิดจากข้อมูลแปลก ๆ อื่น ๆ (และจัดการกับมัน) เพียงพอหรือไม่

5
ฟังก์ชั่นการส่งคืนสตริงสไตล์ที่ดี?
ในโปรแกรม C ของฉันฉันมักต้องการวิธีในการสร้างการแสดงสตริงของ ADT ของฉัน แม้ว่าฉันไม่จำเป็นต้องพิมพ์สตริงไปที่หน้าจอ แต่อย่างใดมันก็เรียบร้อยที่จะมีวิธีการดังกล่าวสำหรับการดีบั๊ก ฟังก์ชันประเภทนี้มักเกิดขึ้น char * mytype_to_string( const mytype_t *t ); ฉันรู้จริงว่าฉันมี (อย่างน้อย) สามตัวเลือกที่นี่เพื่อจัดการหน่วยความจำสำหรับสตริงที่จะกลับมา ทางเลือก 1: การจัดเก็บสตริงส่งคืนในอาร์เรย์ char แบบคงที่ในฟังก์ชัน ฉันไม่ต้องการคิดมากนักยกเว้นว่าสตริงนั้นจะถูกเขียนทับทุกครั้งที่โทร ซึ่งอาจเป็นปัญหาในบางโอกาส ทางเลือกที่ 2: จัดสรรสตริงบนฮีพด้วย malloc ภายในฟังก์ชัน เรียบร้อยจริงๆตั้งแต่ฉันไม่ต้องคิดขนาดของบัฟเฟอร์หรือการเขียนทับ อย่างไรก็ตามฉันต้องจำให้ฟรี () สตริงเมื่อทำแล้วฉันยังต้องกำหนดให้กับตัวแปรชั่วคราวเช่นที่ฉันสามารถฟรี แล้วการจัดสรรฮีปจะช้ากว่าการจัดสรรสแต็คมากจริงๆดังนั้นจึงเป็นคอขวดถ้าทำซ้ำในลูป ทางเลือก 3: ส่งผ่านตัวชี้ไปยังบัฟเฟอร์และให้ผู้เรียกจัดสรรบัฟเฟอร์นั้น ชอบ: char * mytype_to_string( const mytype_t *mt, char *buf, size_t buflen ); …

5
การเพิ่มประสิทธิภาพการจัดสรรสตริงที่ซ้ำซ้อนใน C ++
ฉันมีองค์ประกอบ C ++ ที่ค่อนข้างซับซ้อนซึ่งประสิทธิภาพได้กลายเป็นปัญหา การทำโปรไฟล์แสดงให้เห็นว่าเวลาดำเนินการส่วนใหญ่นั้นใช้เพียงการจัดสรรหน่วยความจำสำหรับstd::strings เท่านั้น ฉันรู้ว่ามีจำนวนมากซ้ำซ้อนในสายเหล่านั้น ค่าจำนวนเล็กน้อยทำซ้ำบ่อยมาก แต่ก็มีค่าที่ไม่ซ้ำกันจำนวนมาก โดยทั่วไปแล้วสตริงค่อนข้างสั้น ตอนนี้ฉันแค่คิดว่ามันจะทำให้รู้สึกถึงการใช้ซ้ำการจัดสรรบ่อยเหล่านั้นอย่างใด แทนที่จะเป็น 1,000 พอยน์เตอร์ถึง 1,000 ค่า "foobar" ที่แตกต่างกันฉันสามารถมี 1,000 พอยน์เตอร์ต่อหนึ่งค่า "foobar" ความจริงที่ว่านี้จะมีประสิทธิภาพมากขึ้นของหน่วยความจำเป็นโบนัสที่ดี แต่ฉันส่วนใหญ่กังวลเกี่ยวกับความล่าช้าที่นี่ ฉันเดาว่าตัวเลือกหนึ่งจะรักษารีจิสทรีของค่าที่จัดสรรไว้บางส่วน แต่เป็นไปได้หรือไม่ที่จะทำให้การค้นหารีจิสทรีเร็วขึ้นกว่าการจัดสรรหน่วยความจำซ้ำซ้อน นี่เป็นวิธีที่ปฏิบัติได้หรือไม่?

5
การวางเครื่องหมายข้อความไว้ในรูปแบบของสตริงที่ไม่ดีหรือไม่? มีทางเลือกอื่นหรือไม่?
ฉันทำงานกับสตริงจำนวนมากซึ่งต้องการการจัดการอย่างมาก ตัวอย่างเช่นฉันอาจสร้างสตริงเช่นนี้ ส่วนที่ 1 เรือ ส่วนการ เขียนโปรแกรมA ส่วนที่ 2 การแบ่งพาร์ติชั่นสำหรับการเขียนโปรแกรม ส่วน AA มาตรารายการ SQL สตริงจะใหญ่เกินไปที่จะตรวจสอบด้วยตนเองทุกส่วน ตอนนี้ฉันต้องsplitนี้stringเป็นstringlistโดยส่วนและชิ้นส่วน ฉันนึกถึงตัวเลือกสองทาง: นิพจน์ปกติ: QStringList sl = s.split(QRegularExpression("\n(?=Part [0-9]+|Section [A-Z]+)")); ดูเหมือนว่าจะใช้งานได้ แต่บางครั้งมีข้อยกเว้นเกิดขึ้น (IE: Section SQL Entriesอาจแยกได้) มิฉะนั้นสิ่งที่ฉันสามารถทำได้คือวางเครื่องหมายเมื่อฉันสร้างสตริงเริ่มต้น: art ส่วนที่ 1 เรือ ection ส่วน โปรแกรมA art ส่วนที่2 การแบ่งพาร์ติชันสำหรับการเขียนโปรแกรม ection ส่วนมาตราAA ของมาตรา SQL ซึ่งหมายความว่าการแยกสตริงจะกลายเป็นเรื่องง่าย: QStringList sl = s.split("🚤💻")); …

1
จับคู่สองสาย แต่อนุญาตให้มีข้อผิดพลาดในระดับหนึ่ง
ฉันจะจับคู่สองสายได้อย่างไร แต่ในขณะเดียวกันก็อนุญาตให้จำนวนอักขระ X ไม่ถูกต้องในการแข่งขัน จำนวนข้อผิดพลาดควรเป็นตัวแปรที่ควบคุมได้ ในขณะที่จำนวนอักขระ X ไม่สามารถจับคู่ในสตริงได้ควรมีข้อ จำกัด เกี่ยวกับจำนวนการรันในลำดับ รับสองสายฉันอาจอนุญาตให้ 5 ตัวอักษรจะแตกต่างกัน แต่ไม่เกิน 2 ในแถว ฉันกำลังมองหาอัลกอริทึมที่แนะนำสำหรับการเปรียบเทียบทั้งสองสายหรืออาจจะมีวิธีการแก้ปัญหาที่รู้จักกันแล้วสำหรับเรื่องนี้

3
จำนวนสตริงเมื่อแต่ละตัวละครจะต้องเกิดขึ้นแม้แต่ครั้ง
ฉันตีหัวกะโหลกที่ปัญหานี้มาระยะหนึ่งแล้วและมันเริ่มทำให้ฉันหงุดหงิดจริงๆ ปัญหาคือ: ฉันมีชุดของตัวอักษร, A, B, และC Dฉันต้องบอกว่าสตริงสามารถสร้างจากตัวละครเหล่านี้ได้กี่วิธีเมื่อความยาวเป็นnและตัวละครแต่ละตัวจะต้องเกิดขึ้นซ้ำ ๆ ตัวอย่างเช่นคำตอบสำหรับn = 2คือ 4: AA BB CC DD คำตอบn = 4คือ 40 สตริงที่ใช้ได้บางส่วนคือ: AAAA AABB CACA DAAD BCCB ฉันติดอยู่กับตรรกะ ฉันรู้สึกว่าอาจมีวิธีแก้ปัญหา DP สำหรับสิ่งนี้ การบังคับให้ฉันผ่านสิ่งนี้ออกมาจากคำถาม: จำนวนโซลูชันเติบโตอย่างรวดเร็วเป็นจำนวนมหาศาล ฉันได้ลองวาดไอเดียต่าง ๆ ลงบนกระดาษแล้วก็ไม่มีประโยชน์ ฉันต้องทิ้งความคิดเหล่านั้นเกือบทั้งหมดเนื่องจากความซับซ้อนของมันใหญ่เกินไป n = 10^4การแก้ปัญหาควรจะมีประสิทธิภาพสำหรับ หนึ่งในความคิดของฉันคือไม่ต้องติดตามสายอักขระที่แท้จริง แต่เฉพาะว่าตัวละครแต่ละตัวนั้นปรากฏตัวหรือแม้แต่ช่วงเวลาคี่ ฉันไม่สามารถหาวิธีที่จะใช้ตรรกะนี้ได้ มีใครช่วยฉันบ้าง

1
เป็นไปได้ที่การปรับปรุง Damerau-Levenshtein
ฉันเพิ่งใช้อัลกอริทึมระยะทาง Damerau-Levenshtein จาก pseudocode บน Wikipedia ฉันไม่สามารถหาคำอธิบายใด ๆ ว่าวิธีการทำงานและชื่อตัวแปรใช้ pseudocode uninformative สมบูรณ์เช่นDA, DB, i1และj1ที่เหลือฉันเกาหัวของฉัน นี่คือการใช้งานของฉันใน Python: https://gist.github.com/badocelot/5327337 การติดตั้ง Python ช่วยให้ฉันเดินผ่านโปรแกรมและค้นหาสิ่งที่เกิดขึ้นเปลี่ยนชื่อตัวแปรเป็นชื่อที่มีประโยชน์มากขึ้น ฉันคุ้นเคยกับแนวทางของ Wagner-Fischer มากพอที่จะคำนวณระยะทางของ Levenshtein ที่ฉันมีกรอบอ้างอิง ด้วยความเสี่ยงที่จะมีความยาวมากเกินไปนี่เป็นวิธีที่ฉันเข้าใจ Damerau-Levenshtein: ตัวแปรลึกลับ: DA( last_rowในรหัสของฉัน) เป็นแผนที่ชนิดหนึ่งที่ถือแถวสุดท้ายที่แต่ละองค์ประกอบถูกเห็น ในรหัสของฉันมันเป็นพจนานุกรม Python ที่แท้จริง DB( last_match_col) เก็บคอลัมน์สุดท้ายที่ตัวอักษรbตรงกับตัวอักษรในaแถวปัจจุบัน i1( last_matching_row) คือหมายเลขแถวจากDAสำหรับตัวอักษรปัจจุบันในb j1เป็นเพียงสำเนาของDB/ last_match_colก่อนที่จะอัปเดต ในรหัสของฉันฉันเพิ่งย้ายที่last_match_colมีการปรับปรุงและกำจัดตัวแปรนี้ ค่าขนย้าย: H[i1][j1] + (i-i1-1) + 1 + …


7
string.format กับตัวแปรเทียบกับตัวแปรอินไลน์
ข้อดี / ข้อเสีย (ถ้ามี) คืออะไรที่จะใช้ string output; int i = 10; output = string.Format("the int is {0}", i); กับ string output; int i = 10; output = "the int is " + i; ฉันได้ใช้ตัวอย่างหลังเสมอ แต่ดูเหมือนว่าบทเรียนออนไลน์ส่วนใหญ่จะใช้ตัวอย่าง string.format ฉันไม่คิดว่ามีความแตกต่างที่แท้จริงในแง่ของประสิทธิภาพความคิดเริ่มต้นของฉันคือ coder จึงไม่ต้องแยกสตริงเพื่อแทรกตัวแปร
9 c#  .net  vb.net  strings 

1
เรียน String ตามกราฟ?
ฉันสงสัยว่าทำไมเราไม่มีคลาสสตริงที่แสดงสตริง Unicode grapheme clusters แทนที่จะเป็นรหัสจุดหรือตัวอักษร สำหรับฉันแล้วดูเหมือนว่าในแอปพลิเคชั่นส่วนใหญ่มันจะง่ายกว่าสำหรับโปรแกรมเมอร์ที่จะเข้าถึงส่วนประกอบของกราฟเมื่อจำเป็นกว่าที่จะต้องจัดระเบียบมันจากจุดรหัสซึ่งดูเหมือนจำเป็นแม้ว่าจะหลีกเลี่ยงการทำลายสตริงใน "mid-grapheme" (อย่างน้อยก็ในทางทฤษฎี) ภายในคลาสสตริงอาจใช้การเข้ารหัสความยาวตัวแปรเช่น UTF-8, UTF-16 หรือในบริบทนี้แม้ UTF-32 คือความยาวตัวแปร หรือใช้คลาสย่อยสำหรับพวกเขาทั้งหมด (และกำหนดค่าตัวเลือกในขณะใช้งานเพื่อให้ภาษาต่าง ๆ สามารถใช้การเข้ารหัสที่เหมาะสมที่สุด) แต่ถ้าโปรแกรมเมอร์สามารถ "เห็น" หน่วยกราฟเมื่อตรวจสอบสตริงจะไม่ '
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.