سؤال

أستخدم PHP منذ حوالي 4 سنوات، ومع ذلك واجهت مشكلة تتطلب شيئًا ذو أداء أفضل قليلاً (:P) ولذلك اخترت C++.

البرنامج الذي أكتبه هو برنامج Linux الخفي الذي سيقوم بمسح قاعدة بيانات MySQL بحثًا عن عناوين URL لتحميلها، وتحميلها باستخدام cURL، والبحث عن سلسلة محددة، ثم تحديث قاعدة البيانات وفقًا لذلك.المشكلة التي أواجهها هي أنني لا أعرف حجم البيانات التي يجب تخزينها في متغير حتى يتم البحث عن سلسلة معينة.

خطرت لي فكرة استخدام قائمة مرتبطة وتخصيص المزيد من العقد حيث تملأ البيانات القائمة.هل هذه طريقة جيدة للقيام بالأشياء؟

شكرا لك مقدما،

هل كانت مفيدة؟

المحلول

وفي ج ++ الطبقة ناقلات يمكن تخزين كمية غير معروفة الحجم من البيانات.

#include <string>
#include <vector>

std::vector <std::string>Data;

std::string newData = "a String";
Data.push_back(newData);

std::string otherData = "a different String";
Data.push_back(otherData);

ومن 'سلسلة' بالطبع يمكن أن يكون أي نوع البيانات التي تريدها، ويمكنك الوصول إلى البيانات باستخدام بيانات [0] للعودة السلسلة الأولى، ويمكنك استخدام Data.size () لإرجاع مبلغ السلاسل في ناقلات / مجموعة.

for(int x = 0; x != Data.size(); x++)
{
   //Do what you want with the data here using Data[x]
}

نصائح أخرى

في عام، هل تريد استخدام واحدة من الحاويات القياسية. اقتراحي الشخصي هو std::vector. يمكنك استخدامه بمثابة مجموعة (كما هو مضمون البيانات لتكون متجاورة) ولها فهرسة مريحة وعمليات الإدراج (يبدو وكأنه كنت لا ترغب في إزالة عند هذه النقطة).

وعلى وجه التحديد، يمكن أن تقوم بإعداد شيء من هذا القبيل

std::vector<char> buff;
// while you are reading data
buff.push_back (item);

عند الانتهاء يمكنك الاتصال buff.size لمعرفة كم تقرأ.

واضاف باعتبارها مكافأة (إذا كنت في الواقع التعامل مع مخازن شخصية)، عند أخيرا الحصول على جميع البيانات التي تحتاجها يمكنك تحويله إلى std::string للقيام بكل ما في البحث الذي تريد القيام به.

std::vector<char> buff;
buff.push_back('e');
buff.push_back('a');
buff.push_back('t');

std::string s(&buff[0], buff.size());

وقام لصحتها.

لديك الكثير لتكتشفه هناك.

يجب عليك توجيه اكتشافك على وجه التحديد إلى المحكمة الخاصة بلبنان:يستخدم مرجع C ++

الآن عليك أن تحاول تعلم كيفية الاستخدام:

  • std::vector
  • std::string
  • std::cin و std::cout (العالميات)

على std::string يجب أن تلاحظ عددًا لا بأس به من الخوارزميات مثل find, find_first_of, find_last_of.

لاحظ أن معالجة السلسلة في لغة C++ يمكن أن تكون صعبة للغاية (كما في الجملة المطولة).

إذا كنت مرتاحًا مع التعبيرات العادية، فقد تكون على استعداد للمحاولة Boost.Regex.لاحظ أنه يجب عليك الارتباط بمكتبتها.

أيضًا، إذا كنت قادمًا من PHP وترغب في زيادة أدائك، فيمكنك البدء بالكثير من لغات البرمجة النصية المختلفة (Python هي المفضلة لدي)، وربما يكون الأمر أسهل.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top