Bagaimana cara mendapatkan token berikutnya di Cstring jika saya ingin menggunakannya sebagai int? (c++)

Tujuan saya adalah mengambil arahan dari pengguna dan akhirnya file teks untuk menggerakkan robot. Tangkapannya adalah saya harus menggunakan Cstring (seperti char word[];) daripada std::string dan memberi token untuk digunakan.

kodenya terlihat seperti ini:

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);
    }
}

Saya belum pernah menggunakan Cstring. Saya belum pernah membuat token apa pun sebelumnya, dan saya tidak tahu cara menulisnya. TA kami mengharapkan kami untuk mencari di Google dan menemukan semua jawaban karena mereka sadar kami belum pernah diajari metode ini. Semua orang di lab saya mengalami lebih banyak masalah daripada biasanya.

Saya tidak tahu kode apa yang harus ditulis tetapi saya tahu apa yang saya ingin program saya lakukan.
Saya ingin program tersebut dijalankan seperti ini:

1) Menanyakan arah.
2) cin.getline yang dimasukkan pengguna
3) memberi token pada string yang dimasukkan
4) jika kata pertama token == "maju" pindah ke token berikutnya dan cari tahu caranya beberapa inci untuk maju lalu maju
5) else jika token pertama == "putar" pindah ke token berikutnya. jika token berikutnya == "kiri" pindah ke token berikutnya dan cari tahu berapa derajat untuk berbelok ke kiri

Saya harus melakukan ini untuk maju x, mundur x, belok kiri x, belok kanan x, dan berhenti (di mana x dalam inci atau derajat). Saya sudah menulis fungsi yang memberi tahu robot cara bergerak maju satu inci dan memutar derajat. Saya hanya perlu mengetahui cara mengonversi string yang dimasukkan ke semua huruf kecil dan berpindah dari token ke token dan mengonversi atau mengekstrak angka dari string untuk menggunakannya sebagai bilangan bulat.

Jika semuanya belum jelas Anda dapat membaca tulisan lab saya di tautan ini: http://www.cs.utk.edu/~cs102/robot_labs/Lab9.html
Jika ada yang kurang jelas, harap beri tahu saya, dan saya akan mengklarifikasi sebaik mungkin.


person Van    schedule 10.04.2010    source sumber
comment
Jadi ini benar-benar pertanyaan C?   -  person ben    schedule 10.04.2010
comment
James, baca seluruh halamannya. Anda akan menggunakan cstrings dan perpustakaan yang menyertainya. [...] Anda dapat menggunakan apa pun kecuali metode string C++ untuk mengatasi masalah ini. Pustaka string C++ terlarang.   -  person Matthew Flaschen    schedule 10.04.2010
comment
Saya hanya ingin mengucapkan terima kasih kepada semua orang yang segera menjawab. Saya tidak menyangka masalah saya akan terselesaikan secepat ini. Sekali lagi terima kasih semuanya, dan pertanyaan saya telah terjawab. Saya akan segera mendaftar dan login untuk menilai jawabannya.   -  person Van    schedule 10.04.2010


Jawaban (4)


  1. Untuk mengonversi ke yang lebih rendah, Anda dapat menggunakan tolower. Ini mengoperasikan satu karakter pada satu waktu, jadi Anda memerlukan loop sederhana.
  2. Untuk mengurai string menjadi bilangan bulat, Anda dapat menggunakan strtoll.
  3. Pindah ke token berikutnya berarti memanggil strtok lagi (dalam hal ini di dalam pernyataan if).
person Matthew Flaschen    schedule 10.04.2010

Untuk mengonversi string menjadi huruf kecil, Anda dapat menggunakan tolower(). tolower berfungsi pada satu karakter, jadi Anda harus mengulang string Anda dan menerapkannya ke setiap karakter.

Untuk mengonversi string menjadi angka, gunakan strtol, strtoul, atau fungsi terkait lainnya.

person JSBձոգչ    schedule 10.04.2010

anda cukup memanggil strtok lagi untuk mendapatkan token selanjutnya.

Anda mungkin memerlukan pemeriksaan input yang valid, yaitu memeriksa apakah ada nilai berikutnya

biasanya Anda akan menggunakan loop 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

Meskipun saya tidak bisa mengatakan sesuatu tentang CString, saya melihat kesalahan stack overflow dalam kode Anda:

{
    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

Saya menyarankan:

{
    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
dan saya terbuai pada kiasan The Hitchhiker's Guide to the Galaxy. - person Van; 10.04.2010