c++ شرح ماذا يعني string:: npos




c++ شرح (8)

ماذا تعني عبارة العبارة string::npos هنا

found=str.find(str2);

if (found!=string::npos)
    cout << "first 'needle' found at: " << int(found) << endl;

يجب علينا استخدام string::size_type لنوع الإرجاع الخاص بالوظيفة find وإلا قد لا تعمل المقارنة مع string::npos . يجب أن يكون size_type ، الذي يتم تعريفه بواسطة مُخصص السلسلة ، نوعًا لا يتجزأ من size_type . يستخدم المُخصص الافتراضي ، المُخصص ، نوع size_t size_type مثل size_type . نظرًا لأن -1 يتم تحويله إلى نوع متكامل غير موقعة ، فإن npos هي القيمة القصوى غير الموقعة من نوعها. ومع ذلك ، تعتمد القيمة الدقيقة على التعريف الدقيق لنوع size_type . لسوء الحظ ، تختلف هذه القيم القصوى. في الواقع ، (unsigned long)-1 يختلف عن (unsigned short)- 1 إذا كان حجم أنواع مختلفة. وبالتالي ، فإن المقارنة

idx == std::string::npos

قد ينتج false إذا كان idx يحتوي على القيمة -1 و idx و string::npos لها أنواع مختلفة:

std::string s;
...
int idx = s.find("not found"); // assume it returns npos
if (idx == std::string::npos) { // ERROR: comparison might not work
...
}

تتمثل إحدى طرق تجنب هذا الخطأ في التحقق مما إذا كان البحث يفشل مباشرةً:

if (s.find("hi") == std::string::npos) {
...
}

ومع ذلك ، في كثير من الأحيان تحتاج إلى فهرس موقف الأحرف المطابقة. وبالتالي ، هناك حل بسيط آخر وهو تحديد القيمة الموقعة الخاصة بك لـ npos:

const int NPOS = -1;

تبدو المقارنة مختلفة قليلاً وأكثر ملاءمة:

if (idx == NPOS) { // works almost always
...
}

$21.4 - "static const size_type npos = -1;"

يتم إرجاعها بواسطة دالات السلسلة التي تشير إلى وجود خطأ / غير موجودة وما إلى ذلك.


npos هي مجرد قيمة رمزية تخبرك بأن find () لم يعثر على شيء (ربما -1 أو شيء من هذا القبيل). find () يتحقق من التواجد الأول للمعلمة ، ويعيد الفهرس الذي تبدأ به المعلمة. فمثلا،

  string name = "asad.txt";
  int i = name.find(".txt");
  //i holds the value 4 now, that's the index at which ".txt" starts
  if (i==string::npos) //if ".txt" was NOT found - in this case it was, so  this condition is false
    name.append(".txt");

size_t هو متغير غير موقّع ، وبالتالي "القيمة غير الموقعة = - 1" تجعلها تلقائيًا أكبر قيمة ممكنة لـ size_t : 18446744073709551615


هذا يعني عدم العثور عليها.

عادة ما يتم تعريفه على النحو التالي:

static const size_t npos = -1;

من الأفضل المقارنة بـ npos بدلاً من -1 لأن الشفرة أكثر وضوحًا.


سوف تكون npos في حالة فشل العثور على سلسلة فرعية في سلسلة البحث.


يقول المستند لـ string::npos :

npos هي قيمة ثابتة ثابتة للأعضاء ذات أكبر قيمة ممكنة لعنصر من النوع size_t.

كقيمة إرجاع يتم عادةً استخدامه للإشارة إلى الفشل.

يتم تعريف هذا الثابت فعليًا بقيمة -1 (لأي سمة) ، نظرًا لأن size_t هو نوع متكامل غير موقعة ، تصبح أكبر قيمة قابلة للتمثيل لهذا النوع.


string::npos هو ثابت (ربما -1 ) يمثل عدم الموقف. يتم إرجاعها بواسطة طريقة find عندما لم يتم العثور على النمط.







c++