الخوارزميات و هياكل البيانات التحدي الثالث - حل التمرين الثالث بلغة C++

المطلوب

قم بتعريف دالة إسمها PrintWordsOccurence, نمرر لها نص عند إستدعاءها فتقوم بطباعة كم مرة تكررت كل كلمة في هذا النص.

مثال: إذا قمنا باستخدام الدالة PrintWordsOccurence() و تمرير النص "I am happy. I am a doctor. I like chocolate." فإنها ستطبع النتيجة التالية.

[3] I
[2] am
[1] happy.
[1] a
[1] doctor.
[1] like
[1] chocolate.
	


الحل بلغة C++

#include <iostream>
#include <string>
#include "vector"

void printWordsOccurence(std::string s) {

	if (s.empty())
	{
		return;
	}

	int counter = 0;
	std::string word = "";
	std::vector<std::string> words;

	// هذه الإضافة سببها هو سواء كان يوجد مسافة فارغة في آخر النص أم لا يوجد, فإنها لن تؤثر على النتيجة
	s += " ";

	for (int i = 0; i < s.length() - 1; i++)
	{
		if (s[i] != ' ')
		{
			word += s[i];
		}
		else
		{
			words.push_back(word);
			word = "";
		}
	}

	for (int i = 0; i < words.size(); i++)
	{
		counter = 1;
		for (int j = i + 1; j < words.size(); j++)
		{
			if (words[i] == words[j])
			{
				counter = counter + 1;
				words[j] = "";
			}
		}
		if (words[i] != "")
		{
			std::cout << "[" << counter << "] " << words[i] << "\n";
		}
	}
}

int main() {

	std::string text = "I am happy. I am a doctor. I like chocolate.";
	printWordsOccurence(text);

	char end; std::cin >> end;
	return 0;

}
		

سنحصل على النتيجة التالية عند التشغيل.

[3] I
[2] am
[1] happy.
[1] a
[1] doctor.
[1] like
[1] chocolate.
		

الدورات

أدوات مساعدة

أقسام الموقع

دورات
مقالات كتب مشاريع أسئلة