คำถามที่ 1: ป้อนสตริงตัวอักษรพิมพ์เล็ก (a~z) ผ่านแป้นพิมพ์
กรุณาเขียนโปรแกรมกรองสตริง หากมีอักขระที่เหมือนกันหลายตัวปรากฏในสตริง อักขระที่ไม่ปรากฏเป็นครั้งแรกจะถูกกรองออก
ตัวอย่างเช่น ผลลัพธ์ตัวกรองของสตริง "abacacde" คือ "abcde"
จำเป็นต้องใช้ฟังก์ชัน:
คัดลอกรหัสรหัสดังต่อไปนี้:
โมฆะ stringFilter (const ถ่าน * pInputStr, lInputLen ยาว, ถ่าน * pOutputStr);
[อินพุต] pInputStr: สตริงอินพุต
lInputLen: ความยาวสตริงอินพุต
[Output] pOutputStr: สตริงเอาต์พุต พื้นที่ถูกเปิด และมีความยาวเท่ากับสตริงอินพุต
[หมายเหตุ] คุณเพียงแค่ต้องทำอัลกอริธึมฟังก์ชันให้สมบูรณ์เท่านั้น และไม่จำเป็นต้องมีอินพุตและเอาท์พุต IO ใด ๆ ที่อยู่ตรงกลาง
ตัวอย่าง
อินพุต: "deefd" เอาต์พุต: "def"
อินพุต: "afafafaf" เอาต์พุต: "af"
อินพุต: "pppppppp" เอาต์พุต: "p"
ฟังก์ชันหลักถูกซ่อนอยู่ นี่คือทางเข้าทดสอบที่สงวนไว้สำหรับผู้ใช้ คุณสามารถทดสอบฟังก์ชันการใช้งานของคุณได้ที่นี่ และเรียก printf เพื่อพิมพ์ผลลัพธ์
ขณะนี้คุณสามารถใช้วิธีอื่นในการทดสอบได้ ตราบใดที่คุณแน่ใจว่าโปรแกรมขั้นสุดท้ายสามารถดำเนินการได้อย่างถูกต้อง การใช้งานฟังก์ชันก็สามารถแก้ไขได้ตามต้องการ
แต่อย่าเปลี่ยนฟังก์ชั่นต้นแบบ ตรวจสอบให้แน่ใจว่าการคอมไพล์และการดำเนินการไม่ได้รับผลกระทบ
คำถามที่ 2: คำอธิบายคำถาม:
ป้อนสตริงตัวอักษรพิมพ์เล็ก (a~z) ผ่านแป้นพิมพ์ โปรดเขียนโปรแกรมบีบอัดสตริงเพื่อบีบอัดตัวอักษรซ้ำติดต่อกันในสตริงและส่งออกสตริงที่ถูกบีบอัด
กฎการบีบอัด:
1. บีบอัดเฉพาะอักขระที่เกิดซ้ำติดต่อกันเท่านั้น ตัวอย่างเช่น เนื่องจากสตริง "abcbc" ไม่มีอักขระซ้ำติดต่อกัน สตริงที่บีบอัดจึงยังคงเป็น "abcbc"
2. รูปแบบของฟิลด์ที่บีบอัดคือ "จำนวนการซ้ำอักขระ + อักขระ" ตัวอย่างเช่น: สตริง "xxxyyyyyyz" จะกลายเป็น "3x6yz" หลังจากการบีบอัด
จำเป็นต้องใช้ฟังก์ชัน:
คัดลอกรหัสรหัสดังต่อไปนี้:
เป็นโมฆะ stringZip (const char *pInputStr, lInputLen แบบยาว, ถ่าน * pOutputStr);
[อินพุต] pInputStr: สตริงอินพุต
lInputLen: ความยาวสตริงอินพุต
[Output] pOutputStr: สตริงเอาต์พุต พื้นที่ถูกเปิด และมีความยาวเท่ากับสตริงอินพุต
[หมายเหตุ] คุณเพียงแค่ต้องทำอัลกอริธึมฟังก์ชันให้สมบูรณ์เท่านั้น และไม่จำเป็นต้องมีอินพุตและเอาท์พุต IO ใด ๆ ที่อยู่ตรงกลาง
ตัวอย่าง
อินพุต: "cccddecc" เอาต์พุต: "3c2de2c"
อินพุต: "adef" เอาต์พุต: "adef"
อินพุต: "pppppppp" เอาต์พุต: "8p"
คัดลอกรหัสรหัสดังต่อไปนี้:
การทดสอบชั้นเรียนสาธารณะ {
โมฆะคงที่ stringFilter (ถ่าน InputStr [], len ยาว, ถ่าน OutputStr []) {
int[] a= ใหม่ int[26];
จำนวน int=0;
int j=0;//OutputStr[] นับ
สำหรับ(int i=0;i<len;i++){
num = InputStr[i]-'a';
if(a[num]==0){//ไม่ปรากฏ
OutputStr[j]=InputStr[i];
เจ++;
ก[จำนวน]=1;
-
-
-
โมฆะคงที่ stringZip (ถ่าน InputStr [], len ยาว, ถ่าน OutputStr []) {
ถ่านอุณหภูมิ=' ';
จำนวน int=1;
จุดอินท์=0;
สำหรับ(int i=0;i<len;i++){
ถ้า (InputStr [i] == อุณหภูมิ) {
หมายเลข++;
}อื่น{
ถ้า(หมายเลข!=1){
OutputStr[จุด++]=(ถ่าน)(num+'0');
หมายเลข=1;
-
OutputStr[จุด++]=อุณหภูมิ;
อุณหภูมิ=InputStr[i];
-
-
-
โมฆะคงที่สาธารณะ main (String [] args) {
// TODO ต้นขั้ววิธีการสร้างอัตโนมัติ
ถ่าน [] ทดสอบ={'a','a','a','c','b','b','b','a','a','c','a', 'd','d','d','c','d','e'};
ยาว len=test.length;
ถ่าน [] res = ถ่านใหม่ [(int) len];
stringFilter (ทดสอบ, len, res);
int j=res.ความยาว;
สำหรับ(int i=0;i<j;i++){
ถ้า(res[i]!='/0'){
System.out.print(ความละเอียด[i]);
}อื่น
หยุดพัก;
-
ถ่าน [] res2 = ถ่านใหม่ [(int) (2 * len)];
stringZip(ทดสอบ,เลน,res2);
สำหรับ(int i=0;i<2*len;i++){
ถ้า(res2[i]!='/0'){
System.out.print(res2[i]);
}อื่น
หยุดพัก;
-
-
-