Ichki tizimda mag'lubiyatni ajratishning samarali usuli qanday?

Men bu xotira haqidagi butunlay ko'milgan fikrlarni yangitadaman va hokazo. Diqqat qilaman, bu ma'lum tuzilmaning satrlarini tahlil qilishning eng samarali usuli, ammo tizimning noma'lum uzunligi. (har bir o'rnatilgan dasturchining ba'zi yondashuvlari bilishi kerak).

Menda avr oldiga keladigan jasur dog'lar bor. Ular asosan men avr qiladigan muayyan xatti-harakatlarni belgilab beradilar. Nima sababdan String-sinfidan foydalanishni istamayman.

raqamni ajratuvchi mag'lubiyatga ajratuvchi satr

Men protokol ustida biron bir kuchga ega emasman. Menda strtok() , strcpy() funktsiyasidan foydalangan holda yechim bor. Jadval bilan qatorni to'ldiraman, keyin esa agar ba'zi shartlar bajaradigan shartlar bo'lsa, unda agar mavjud bo'lsa.

Biroq, menimcha, davlat mashinasi (xarakterga ko'ra o'qish belgisi) yoki o'xshash tizimlar ustida ishlaydigan yechim mavjudmi. Men hozir juda ko'p vaqtni izladim va mag'lubiyatga oid bu juda keng tarqalgan nishon haqida biron-bir maslahat olish uchun minnatdor bo'lardim.

Kirish uchun Thx. Men yechim so'ramayman, lekin yondashish uchun.

0
Jo'natish funktsiyalaridan foydalaning, ular oddiy va juda ko'p xarajatlarga olib kelmaydi. Aks holda, oddiy davlat mashinasi bilan ajralib turish, shuningdek, siz ko'rib chiqmoqchi bo'lgan formatni juda oddiy ko'rinishga ega bo'lgani kabi, yaxshi yondashish kabi ko'rinadi. Ehtimol, siz savolingizni o'zgartirib, buyruq satrining ba'zi bir namunalarini kiritmoqchisiz.
qo'shib qo'ydi muallif Jabberwocky, manba
Jo'natish funktsiyalaridan foydalaning, ular oddiy va juda ko'p xarajatlarga olib kelmaydi. Aks holda, oddiy davlat mashinasi bilan ajralib turish, shuningdek, siz ko'rib chiqmoqchi bo'lgan formatni juda oddiy ko'rinishga ega bo'lgani kabi, yaxshi yondashish kabi ko'rinadi. Ehtimol, siz savolingizni o'zgartirib, buyruq satrining ba'zi bir namunalarini kiritmoqchisiz.
qo'shib qo'ydi muallif Jabberwocky, manba
C sinflari yo'q. Zotan kutubxona, faqat ishlatilgan vazifalarni bir-biriga bog'lab turadigan bo'lsa, juda ixcham bo'lishi kerak.
qo'shib qo'ydi muallif Olaf, manba
C sinflari yo'q. Zotan kutubxona, faqat ishlatilgan vazifalarni bir-biriga bog'lab turadigan bo'lsa, juda ixcham bo'lishi kerak.
qo'shib qo'ydi muallif Olaf, manba
@TomTanner O'Z OP men siyosatchi deb o'ylayman :)
qo'shib qo'ydi muallif Thomas Ayoub, manba
@TomTanner O'Z OP men siyosatchi deb o'ylayman :)
qo'shib qo'ydi muallif Thomas Ayoub, manba
"sabablar tufayli"? Nimaga string sinfidan foydalanishni istamaysiz?
qo'shib qo'ydi muallif Tom Tanner, manba
"sabablar tufayli"? Nimaga string sinfidan foydalanishni istamaysiz?
qo'shib qo'ydi muallif Tom Tanner, manba
Agar chindan ham yechim taklif qilmoqchi bo'lsangiz, bu savolni yopish uchun ovoz beraman.
qo'shib qo'ydi muallif user3528438, manba
Agar chindan ham yechim taklif qilmoqchi bo'lsangiz, bu savolni yopish uchun ovoz beraman.
qo'shib qo'ydi muallif user3528438, manba
@TomTanner xotirada kam va men xotiramda ochko'zman) =)
qo'shib qo'ydi muallif Stanislav Sokol, manba
@TomTanner xotirada kam va men xotiramda ochko'zman) =)
qo'shib qo'ydi muallif Stanislav Sokol, manba
Men xotirada juda kam, String sinf esa bu tajribani xotirjam his qila olmaydi. Bu asosiy sababdir. Boshqa tomondan, usullar juda chiroyli. @ user3528438 Men allaqachon ishlaydigan yechimim bor, lekin baribir aniq narsalar bor deb o'ylayman, men hali bilmayman.
qo'shib qo'ydi muallif Stanislav Sokol, manba
Men xotirada juda kam, String sinf esa bu tajribani xotirjam his qila olmaydi. Bu asosiy sababdir. Boshqa tomondan, usullar juda chiroyli. @ user3528438 Men allaqachon ishlaydigan yechimim bor, lekin baribir aniq narsalar bor deb o'ylayman, men hali bilmayman.
qo'shib qo'ydi muallif Stanislav Sokol, manba

7 javoblar

Birinchi argumentni (katta satrlarni odatda o'qilishi mumkin) o'zgartirganligi sababli ichki tizim uchun strtokni avtomatik ravishda ishlatish bilan rozi emasman. Xuddi shu maqsadlarni amalga oshirish uchun strchr() , strspn() yoki strcspn() dan foydalanish juda oson va siz dastlabki mag'lubiyatni o'zgartirib, foydalanmoqchimisiz yoki strncpy() ni yozing va bo'sh qoldiring.

2
qo'shib qo'ydi

Tamponlar majmuasi bilan oddiy bir davrda ba'zi bir jarayonlarni quyidagi satrlar bo'ylab tejaydi (bu erda yoki hech narsa tekshirilmaydi)

 pos = 0;
 while (c = get_next_char(), c != delim) { buff[BUFF_N][pos++] = c; }
 buff[BUFF_N][pos] = 0;

 pos = 0;
 while (c = get_next_char(), c != delim) { buff[BUFF_S1][pos++] = c; }
 buff[BUFF_S1][pos] = 0;

 pos = 0;
 while (c = get_next_char(), c != '\n') { buff[BUFF_S2][pos++] = c; }
 buff[BUFF_S2][pos] = 0;

belgilarni to'g'ri joyga o'qiyotganingizda strtok va strcpy-dan foydalanish ancha o'rtacha darajada samarali bo'ladi.

2
qo'shib qo'ydi
Mening paranoyalarim while loops, masalan { ... INSANE_LENGTH) {return ERROR; }} Yoki shundaymi?
qo'shib qo'ydi muallif BRFennPocock, manba
Bu erda nima uchun "bu erda tekshiruv yo'q"
qo'shib qo'ydi muallif Tom Tanner, manba

Tamponlar majmuasi bilan oddiy bir davrda ba'zi bir jarayonlarni quyidagi satrlar bo'ylab tejaydi (bu erda yoki hech narsa tekshirilmaydi)

 pos = 0;
 while (c = get_next_char(), c != delim) { buff[BUFF_N][pos++] = c; }
 buff[BUFF_N][pos] = 0;

 pos = 0;
 while (c = get_next_char(), c != delim) { buff[BUFF_S1][pos++] = c; }
 buff[BUFF_S1][pos] = 0;

 pos = 0;
 while (c = get_next_char(), c != '\n') { buff[BUFF_S2][pos++] = c; }
 buff[BUFF_S2][pos] = 0;

belgilarni to'g'ri joyga o'qiyotganingizda strtok va strcpy-dan foydalanish ancha o'rtacha darajada samarali bo'ladi.

2
qo'shib qo'ydi
Mening paranoyalarim while loops, masalan { ... INSANE_LENGTH) {return ERROR; }} Yoki shundaymi?
qo'shib qo'ydi muallif BRFennPocock, manba
Bu erda nima uchun "bu erda tekshiruv yo'q"
qo'shib qo'ydi muallif Tom Tanner, manba

Agar siz hech qanday ahamiyatga ega bo'lmagan narsalarni tahlil qilishga urinsangiz, " flex va bison .

Juda chuqur o'rganish eğrisi bor, lekin boshqa yondashuvlarga nisbatan ikkita katta afzalliklarga ega.

  1. Muvaffaqiyatsiz matn bilan yaxshi ishlashi mumkin va boshqa yondashuvlar falokat yoki xavfsizlik muammosiga olib kelishi mumkin.
  2. Tashqi kutubxonalardan foydalanilmaydi, shuning uchun faqat haqiqiy ishlab chiqarilgan parse kodi ishlatiladi.
1
qo'shib qo'ydi

Agar siz hech qanday ahamiyatga ega bo'lmagan narsalarni tahlil qilishga urinsangiz, " flex va bison .

Juda chuqur o'rganish eğrisi bor, lekin boshqa yondashuvlarga nisbatan ikkita katta afzalliklarga ega.

  1. Muvaffaqiyatsiz matn bilan yaxshi ishlashi mumkin va boshqa yondashuvlar falokat yoki xavfsizlik muammosiga olib kelishi mumkin.
  2. Tashqi kutubxonalardan foydalanilmaydi, shuning uchun faqat haqiqiy ishlab chiqarilgan parse kodi ishlatiladi.
1
qo'shib qo'ydi

Menimcha, strtok() etarli bo'lishi kerak. Sizning apparatingizning cheklanganligiga qarab strcpy() ni esdan chiqarmasligingiz kerak.

Keyinchalik foydalanish uchun strtok() belgilarini toping, so'ngra manzilni ko'rsatgichga belgilang. Shunday qilib, siz asl nusxadagi matnni egasiz, ammo u uzunligi 12/16 baytni iste'mol qiladigan ortiqcha uchta yoki to'rtta ko'rsatkich bo'lishi mumkin.

0
qo'shib qo'ydi

Menimcha, strtok() etarli bo'lishi kerak. Sizning apparatingizning cheklanganligiga qarab strcpy() ni esdan chiqarmasligingiz kerak.

Keyinchalik foydalanish uchun strtok() belgilarini toping, so'ngra manzilni ko'rsatgichga belgilang. Shunday qilib, siz asl nusxadagi matnni egasiz, ammo u uzunligi 12/16 baytni iste'mol qiladigan ortiqcha uchta yoki to'rtta ko'rsatkich bo'lishi mumkin.

0
qo'shib qo'ydi