ฉันจะรับโทเค็นถัดไปใน Cstring ได้อย่างไรหากฉันต้องการใช้เป็น int (ค++)

วัตถุประสงค์ของฉันคือการขอคำแนะนำจากผู้ใช้และในที่สุดก็ได้รับไฟล์ข้อความเพื่อเคลื่อนย้ายหุ่นยนต์ สิ่งที่จับได้คือฉันต้องใช้ Cstrings (เช่น char word[];) แทนที่จะเป็น std::string และโทเค็นเพื่อใช้

รหัสมีลักษณะดังนี้:

void Navigator::manualDrive()
{

    char uinput[1];
    char delim[] = " ";
    char *token;

    cout << "Enter your directions below: \n";
    cin.ignore();
    cin.getline (uinput, 256);

    token=strtok(uinput, delim);

    if(token == "forward")
    {
        int inches;
        inches=token+1;
        travel(inches);
    }
}

ฉันไม่เคยใช้ Cstrings ฉันไม่เคยโทเค็นอะไรเลยมาก่อน และฉันไม่รู้ว่าจะเขียนสิ่งนี้อย่างไร T.A. ของเราคาดหวังให้เราใช้ Google และค้นหาคำตอบทั้งหมด เพราะพวกเขาตระหนักดีว่าเราไม่เคยได้รับการสอนวิธีการเหล่านี้มาก่อน ทุกคนในห้องทดลองของฉันมีปัญหามากกว่าปกติมาก

ฉันไม่รู้ว่าจะเขียนโค้ดอย่างไร แต่ฉันรู้ว่าต้องการให้โปรแกรมทำอะไร
ฉันต้องการให้มันดำเนินการดังนี้:

1) ถามเส้นทาง
2) cin.getline ที่ผู้ใช้ป้อนข้อมูล
3) โทเค็นสตริงที่ป้อน
4) หากโทเค็นคำแรก == "ไปข้างหน้า" ย้ายไปยังโทเค็นถัดไปและค้นหาวิธีการ หลายนิ้วเพื่อก้าวไปข้างหน้าแล้วก้าวไปข้างหน้า
5) มิฉะนั้นหากโทเค็นแรก == "เลี้ยว" ย้ายไปที่โทเค็นถัดไป ถ้าโทเค็นถัดไป == "ซ้าย" ให้ย้ายไปยังโทเค็นถัดไปแล้วดูว่าต้องเลี้ยวซ้ายกี่องศา

ฉันจะต้องทำสิ่งนี้เพื่อเดินหน้า x ถอยหลัง x เลี้ยวซ้าย x เลี้ยวขวา x และหยุด (โดยที่ x อยู่ในหน่วยนิ้วหรือองศา) ฉันได้เขียนฟังก์ชันที่บอกหุ่นยนต์ว่าจะเคลื่อนที่ไปข้างหน้าหนึ่งนิ้วและหมุนเป็นองศาได้อย่างไร ฉันแค่ต้องรู้วิธีแปลงสตริงที่ป้อนให้เป็นตัวอักษรพิมพ์เล็กทั้งหมด และย้ายจากโทเค็นหนึ่งไปอีกโทเค็น และแปลงหรือแยกตัวเลขจากสตริงเพื่อใช้เป็นจำนวนเต็ม

หากไม่ชัดเจน คุณสามารถอ่านบทความในห้องปฏิบัติการของฉันได้ที่ลิงก์นี้: http://www.cs.utk.edu/~cs102/robot_labs/Lab9.html
หากมีสิ่งใดไม่ชัดเจน โปรดแจ้งให้เราทราบ และเราจะชี้แจงให้ดีที่สุดเท่าที่จะทำได้


person Van    schedule 10.04.2010    source แหล่งที่มา
comment
มันเป็นคำถาม C จริงๆเหรอ?   -  person ben    schedule 10.04.2010
comment
เจมส์ อ่านทั้งหน้าเลย คุณจะใช้ cstrings และไลบรารีที่มาพร้อมกัน [...] คุณสามารถใช้อะไรก็ได้ยกเว้นวิธีสตริง C ++ เพื่อดูแลปัญหานี้ ไลบรารีสตริง C++ ถูกจำกัด   -  person Matthew Flaschen    schedule 10.04.2010
comment
ฉันอยากจะขอบคุณทุกคนที่ตอบทันที ฉันไม่ได้คาดหวังว่าจะแก้ไขปัญหาได้เร็วขนาดนี้ ขอบคุณทุกคนอีกครั้ง และคำถามของฉันได้รับคำตอบแล้ว ฉันจะลงทะเบียนและเข้าสู่ระบบเพื่อให้คะแนนคำตอบเร็วๆ นี้   -  person Van    schedule 10.04.2010


คำตอบ (4)


  1. หากต้องการแปลงเป็นค่าต่ำกว่า คุณสามารถใช้ tolower มันดำเนินการครั้งละหนึ่งอักขระ ดังนั้นคุณจึงต้องมีการวนซ้ำแบบง่ายๆ
  2. หากต้องการแยกสตริงเป็นจำนวนเต็ม คุณสามารถใช้ strtoll
  3. การย้ายไปยังโทเค็นถัดไปหมายถึงการเรียก strtok อีกครั้ง (ในกรณีนี้คือภายใน คำสั่ง if)
person Matthew Flaschen    schedule 10.04.2010

หากต้องการแปลงสตริงเป็นตัวพิมพ์เล็ก คุณสามารถใช้ tolower() tolower ใช้ได้กับอักขระตัวเดียว ดังนั้นคุณต้องวนซ้ำสตริงและนำไปใช้กับอักขระทุกตัว

หากต้องการแปลงสตริงเป็นตัวเลข ให้ใช้ strtol, strtoul หรือฟังก์ชันอื่นๆ ที่เกี่ยวข้อง

person JSBձոգչ    schedule 10.04.2010

คุณเพียงแค่โทร strtok อีกครั้งเพื่อรับโทเค็นถัดไป

คุณอาจต้องตรวจสอบอินพุตที่ถูกต้อง เช่น ตรวจสอบว่ามีค่าถัดไป

โดยปกติแล้วคุณจะใช้การวนซ้ำ while

ex

token=strtok(uinput, delim);
while (token != NULL)
{
   // use token

  //go to next token
   token=strtok(uinput, delim);
}
person Holograham    schedule 10.04.2010

แม้ว่าฉันจะพูดอะไรเกี่ยวกับ CString ไม่ได้ แต่ฉันพบข้อผิดพลาดของสแต็กโอเวอร์โฟลว์ในโค้ดของคุณ:

{
    char uinput[1]; // <- Here you define a one byte large buffer on the stack 
    char delim[] = " ";
    char *token;

    cout << "Enter your directions below: \n";
    cin.ignore();
    cin.getline(uinput, 256); // and here you put up to 256 bytes into it

ฉันจะแนะนำ:

{
    const int bufSize = 42; // since 42 is the awnser to everything
    char uinput[bufSize];
    // ...
    cin.getline(uinput, bufSize);
person Rudi    schedule 10.04.2010
comment
และฉันก็สนใจ The Hitchhiker's Guide to the Galaxy พาดพิงถึง - person Van; 10.04.2010