একটি চরকে কীভাবে অ্যারে রূপান্তর করবেন?


254

একটি সি ++ রূপান্তর stringএকটি গৃহস্থালি অ্যারে বেশ ব্যবহার straightorward হয় c_strস্ট্রিং এর ফাংশন এবং তারপর করছেন strcpy। তবে বিপরীতে কীভাবে করবেন?

: আমি মত একটি গৃহস্থালি অ্যারে আছে char arr[ ] = "This is a test";রূপান্তরিত ফিরে করুন: string str = "This is a test

উত্তর:


369

stringবর্গ একটি কন্সট্রাকটর করে একটি শূন্য-সমাপ্ত সি-স্ট্রিং লাগে রয়েছে:

char arr[ ] = "This is a test";

string str(arr);


//  You can also assign directly to a string.
str = "This is another string";

// or
str = arr;

2
এটি এখনও যেভাবে কাজ করবে। ওভারলোডেড অ্যাসাইনমেন্ট অপারেটরটি একটি নেয় const char*, যাতে আপনি এটি একটি স্ট্রিং আক্ষরিক বা চর অ্যারে (যা এর মধ্যে ক্ষয় হয়) পাস করতে পারেন।
রহস্যময়

3
@ kingsmasher1: স্ট্রিক্টলি ভাষী, আকারে স্ট্রিং "hello world" হয় অ্যারে। আপনি যদি sizeof("hello world")এটি ব্যবহার করেন তবে আপনাকে বিন্দুর আকারের (সম্ভবত 4 বা 8) আকারের চেয়ে অ্যারের আকার দেবে (যা 12)।
স্বপ্ন

7
নোট করুন যে এটি কেবল ধ্রুবক NULL- সমাপ্ত সি-স্ট্রিংয়ের জন্য কাজ করে। stringকন্সট্রাকটর, সাথে কাজ করবে না উদাহরণস্বরূপ, একটি পাস যুক্তি স্ট্রিং হিসেবে ঘোষিত unsigned char * bufferকিছু বাইট প্রবাহ লাইব্রেরি হ্যান্ডলিং খুব সাধারণ।
সিএক্সজে

4
ধ্রুব কিছু থাকার দরকার নেই। আপনার যদি কোনও গৃহনির্মাণের বাইট বাফার থাকে তবে আপনি অন্য নির্মাতা ব্যবহার করতে পারেন: std::string str(buffer, buffer+size);তবে std::vector<unsigned char>সেই ক্ষেত্রে সম্ভবত এটির সাথে যুক্ত থাকা ভাল ।
আর মার্টিনহো ফার্নান্দিস

2
যদিও এটা সুস্পষ্ট হতে পারে: strহয় না একটি রূপান্তর ফাংশন এখানে। এটি স্ট্রিং ভেরিয়েবলের নাম। আপনি অন্য কোনও চলক নাম ব্যবহার করতে পারেন (উদাঃ string foo(arr);)। রূপান্তরটি স্ট্যান্ড :: স্ট্রিংয়ের নির্মাতা দ্বারা সম্পন্ন হয় যা অন্তর্নিহিত বলা হয়।
ক্রিস্টোফার কে।

55

আর একটি সমাধান এর মতো দেখতে পারে,

char arr[] = "mom";
std::cout << "hi " << std::string(arr);

যা অতিরিক্ত ভেরিয়েবল ব্যবহার করা এড়িয়ে চলে।


আপনি কীভাবে উত্তরটিতে ইঙ্গিত করতে পারবেন যে এটি আমার মিস্টিয়ালের গৃহীত উত্তর থেকে কীভাবে আলাদা?
মার্টেন বোদেউয়েস

@ ওয়ালস্টেড দয়া করে সম্পাদনা দেখুন। আমি কেবল আমার উত্তরটি রেখেছি কারণ আমি যখন উত্তরটি খুঁজছিলাম তখন এই পৃষ্ঠাটি প্রথম এসেছিলাম তখন তার ইচ্ছামত আমি তা দেখতে চাইতাম। আমার মতো বোকা কেউ যদি এই পৃষ্ঠাটি জুড়ে আসে তবে প্রথম উত্তরটি দেখে এই সংযোগ তৈরি করতে সক্ষম না হয়, আমি আশা করি আমার উত্তর তাদের সহায়তা করবে।
stackPusher

5
স্ট্রিং () স্ট্যান্ডিং :: স্ট্রিংয়ের নির্মাতা, আপনি উল্লেখ করতে পারেন যে আপনি যদি স্টাড নেমস্পেস ব্যবহার না করেন সেই ক্ষেত্রে আপনাকে নেমস্পেস যুক্ত করতে হবে। উদাহরণ:cout << "test:" + std::string(arr);
ক্রিস্টোফার কে।

1
@ChristopherK। আমি এটিকে ছেড়ে দিয়েছি কারণ শীর্ষ রেট করা উত্তর ছিল। আমার উত্তরটি সেই উত্তরটির পরিপূরক হতে বোঝায় তাই আমি একই অনুমানগুলি রেখেছি। আশা করি যে কেউ এটি বুঝতে পারে না সে আপনার মন্তব্যটি দেখতে পাবে
stackPusher

স্ট্রিং একটি পরিবর্তনশীল নাম বা একটি কী এখানে আমি ব্যবহার করতে string aString(someChar);পারি?
ড্রিস বাউনউয়ার

31

শীর্ষে ভোট দেওয়া উত্তরে একটি ছোট সমস্যা মিস হয়েছে। যথা, অক্ষরের অ্যারেতে 0 থাকতে পারে। যদি আমরা উপরে নির্দেশিত হিসাবে একক পরামিতি সহ কনস্ট্রাক্টর ব্যবহার করি তবে আমরা কিছু তথ্য হারাব। সম্ভাব্য সমাধানটি হ'ল:

cout << string("123\0 123") << endl;
cout << string("123\0 123", 8) << endl;

আউটপুট হল:

123
123 123


2
এটি যদি আপনি std::stringবাইনারি ডেটার জন্য ধারক হিসাবে ব্যবহার করেন এবং অ্যারেতে '\ 0' থাকে না তা নিশ্চিত হতে না পারলে এটি আরও ভাল উত্তর ।
অসিল কিসিকি

11
#include <stdio.h>
#include <iostream>
#include <stdlib.h>
#include <string>

using namespace std;

int main ()
{
  char *tmp = (char *)malloc(128);
  int n=sprintf(tmp, "Hello from Chile.");

  string tmp_str = tmp;


  cout << *tmp << " : is a char array beginning with " <<n <<" chars long\n" << endl;
  cout << tmp_str << " : is a string with " <<n <<" chars long\n" << endl;

 free(tmp); 
 return 0;
}

আউট:

H : is a char array beginning with 17 chars long

Hello from Chile. :is a string with 17 chars long

ফ্রি (টিএমপি) কোথায়? স্ট্রিং কি এটি যত্ন নেয়?
huseyin tugrul buyukisik

1
ভাল প্রশ্ন. আমি মনে করি ফ্রি থাকা উচিত কারণ আমি ম্যালোক ব্যবহার করছি।
ক্রিশ্চিয়ান
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.