اذهب إلى المحتوى

السؤال

Recommended Posts

  • 2
نشر

بداية من ++C11 يمكنك أن تستخدم الدالة to_string لتحويل الأرقام بشكل عام إلى نصوص، كالتالي:

#include <string> 

int main() {
	int x = 23;
	std::string s = std::to_string(x);

	return 0;
}

الكود السابق مشابهة لـ atoi و itoa في لغة C ولكن من خلال std:to_string

يمكنك أيضًا أن تستعمل stringstream بدون مشكلة:
 

int main() {
	int x = 10;
	std::stringstream ss;
	ss << x;
	std::string str = ss.str();

	return 0;
}

ولكن  الطريقة الأولى أسهل في الكتابة وأوضح في القراءة.

  • 1
نشر

الطريقة اليدوية هي تشكيل سلسسة نصية من العدد بتقسيمه لعوامله الرقمية، حيث نأخذ الأرقام من اليمين لليسار عن طريق باقِ القسمة على 10 ونكرر العملية بدمج المحارف التي سنكونها من هذه الأرقام، ثم نعكس السلسلة النصية الناتجة

// دالة تعيد سلسلة نصية
// تستقبل عدد رقم صحيح
string number_to_string(int x) {

    if (!x) // x = 0
        return "0";

    string s = ""; // تهيئة السلسة الحاوية على الإجابة
    while(x) {
      // نأخذ آحاد الرقم من خلال باقي القسمة على 10
      // نضيف للرقم المحرف الصفري مايكافئ عملية التحويل إلى محرف نصي
        s.push_back(x%10 + '0');
        x /= 10;
    }
  // نعكس السلسة 
  // العملية السابقة تضيف الأرقام في منزلة العشرات و المئات على يمين الأعدادا السابقة 
    reverse(s.begin(), s.end());
    return s;
}

كما يمكن استعمال sprintf حيث في المثال نكتب القيمة X في السلسلة النصية y

#include <stdio.h>

int main()
{
  int x=23;
  char y[2]; //the output buffer
  sprintf(y,"%d",x);
  printf("%s",y)
}

ويمكن استخدام boost/lexical_cast وهو يوفر آلية تحويل الأنماط

#include <iostream>
#include <string>
#include <boost/lexical_cast.hpp>
 
int main()
{
    int i = 10;
 // نمط الإعادة هو سلسلة نصية
    std::string s = boost::lexical_cast<std::string>(i);
    std::cout << s << std::endl;
 
    return 0;
}

 

  • 0
نشر (معدل)

يمكنك استخدام string streams. حيث أنه في هذه الطريقة، يعلن ال string stream عن كائن (stream object) يقوم أولاً بإدخال رقم ك stream في كائن، ثم يستخدم الدالة ()str لتحويله إلى سلسلة.

#include<iostream>
#include <sstream> // string streams من أجل 
#include <string> //  string من أجل
using namespace std;
int main()
{
	int x = 2513183;
	//  output string stream إنشاء كائن
	ostringstream str1;
    // (stream) إرسال رقم كتدفق في سلسلة الإخراج 
	str1 << x;
	// the str() converts number into string
	string s = str1.str();
	// عرض النتيجة
	cout << "The newly formed string from number is : ";
	cout << s << endl;
	return 0;
}
// الخرج:
/*
The newly formed string from number is : 2513183
*/

وللتحويل المعاكس (من سلسلة إلى رقم) يمكنك  استخدم stringstream، وهي طريقة سهلة لتحويل سلاسل نصية من الأرقام إلى ints أو floats أو double. مثال:

#include <iostream>
#include <sstream>
using namespace std;
int main()
{
	string s = "12345";
	// stringstream كائن من الصنف
	stringstream obj(s);
	// الكائن له القيمة 12345 وسنقوم بدفقه إلى عدد الصحيح 
	int x = 0;
	obj >> x;
	//يحمل القيمة المطلوبة x الآن المتغير
	cout << "Value of x : " << x;
	return 0;
}
/*
Value of x : 12345
*/

 

تم التعديل في بواسطة Ali Haidar Ahmad

انضم إلى النقاش

يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.

زائر
أجب على هذا السؤال...

×   لقد أضفت محتوى بخط أو تنسيق مختلف.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   جرى استعادة المحتوى السابق..   امسح المحرر

×   You cannot paste images directly. Upload or insert images from URL.

  • إعلانات

  • تابعنا على



×
×
  • أضف...