প্রিন্টফ () ব্যবহার করে কোনও স্ট্রিংয়ের কয়টি অক্ষর মুদ্রণ করতে হবে তার কোনও উপায় আছে?


127

কোনও স্ট্রিংয়ের কয়টি অক্ষর মুদ্রণ করতে হবে তা নির্দিষ্ট করার কোনও উপায় আছে ( intগুলি দশমিক জায়গাগুলির সমান )?

printf ("Here are the first 8 chars: %s\n", "A string that is more than 8 chars");

এটি মুদ্রণ করতে চান: Here are the first 8 chars: A string

উত্তর:


226

মূল উপায় হ'ল:

printf ("Here are the first 8 chars: %.8s\n", "A string that is more than 8 chars");

অন্যান্য, প্রায়শই অধিক দরকারী উপায় হ'ল:

printf ("Here are the first %d chars: %.*s\n", 8, 8, "A string that is more than 8 chars");

এখানে আপনি প্রিন্টফ () এর অন্তর্নির্মিত হিসাবে দৈর্ঘ্যটি নির্দিষ্ট করেছেন, যা আর্গুমেন্ট থেকে দৈর্ঘ্য পাওয়ার অনুরোধ হিসাবে ফর্ম্যাটে '*' কে বিবেচনা করে।

আপনি স্বরলিপিটিও ব্যবহার করতে পারেন:

printf ("Here are the first 8 chars: %*.*s\n",
        8, 8, "A string that is more than 8 chars");

এটি "% 8.8s" স্বরলিখনের সাথেও সাদৃশ্যপূর্ণ তবে আবার রানটাইমে আপনাকে সর্বনিম্ন এবং সর্বাধিক দৈর্ঘ্য নির্দিষ্ট করতে দেয় - আরও বাস্তবের মতো দৃশ্যে:

printf("Data: %*.*s Other info: %d\n", minlen, maxlen, string, info);

printf()এই প্রক্রিয়াগুলি সংজ্ঞায়িত করার জন্য পসিক্স স্পেসিফিকেশন ।


2
শেষ উদাহরণে: অনুলিপিযুক্ত স্ট্রিং মিনেলের চেয়ে কম হলে কী হবে?
ট্রুথসাইকার

4
-সম্পূর্ণ নির্দিষ্ট দৈর্ঘ্য পর্যন্ত এটি তৈরি করতে আউটপুটটি খালি প্যাডযুক্ত হবে (বামদিকে আপনি একটি যোগ না করে )।
জোনাথন লেফলার

13
printf ("Here are the first 8 chars: %.8s\n", "A string that is more than 8 chars");

% 8s ন্যূনতম 8 টি অক্ষরের প্রস্থ উল্লেখ করবে। আপনি 8 এ ছাঁটাই করতে চান, সুতরাং% .8 ব্যবহার করুন।

আপনি যদি সর্বদা 8 টি অক্ষর মুদ্রণ করতে চান তবে আপনি% 8.8 ব্যবহার করতে পারেন


13

একটি নির্দিষ্ট পরিমাণ অক্ষর নির্দিষ্ট করার পাশাপাশি আপনি ব্যবহার করতে পারেন *যার অর্থ হল যে মুদ্রণটি আর্গুমেন্ট থেকে অক্ষরের সংখ্যা নেয়:

#include <stdio.h>

int main(int argc, char *argv[])
{
        const char hello[] = "Hello world";
        printf("message: '%.3s'\n", hello);
        printf("message: '%.*s'\n", 3, hello);
        printf("message: '%.*s'\n", 5, hello);
        return 0;
}

ছাপে:

message: 'Hel'
message: 'Hel'
message: 'Hello'

11

ব্যবহার করে printfআপনি করতে পারেন

printf("Here are the first 8 chars: %.8s\n", "A string that is more than 8 chars");

আপনি যদি সি ++ ব্যবহার করেন তবে আপনি এসটিএল ব্যবহার করে একই ফলাফল অর্জন করতে পারেন:

using namespace std; // for clarity
string s("A string that is more than 8 chars");
cout << "Here are the first 8 chars: ";
copy(s.begin(), s.begin() + 8, ostream_iterator<char>(cout));
cout << endl;

বা, কম দক্ষতার সাথে:

cout << "Here are the first 8 chars: " <<
        string(s.begin(), s.begin() + 8) << endl;

1
দ্রষ্টব্য: ব্যবহার করবেন নাostream_iterator<char>(cout) ! পরিবর্তে, ব্যবহার করুন ostreambuf_iterator<char>(cout)! পারফরম্যান্সের পার্থক্য বরং বড় হওয়া উচিত।
ডায়েটমার কাহল

ওয়ে আরও দক্ষ পরিবর্তে ব্যবহার করার জন্য: std::cout.write(s.data(), 8)। বা আধুনিক সি ++ এ std::cout << std::string_view{s.data(), 8},।
আর্টিয়ার

4

প্রথম চারটি অক্ষর মুদ্রণ করুন:

printf("%.4s\n", "A string that is more than 8 chars");

আরও তথ্যের জন্য এই লিঙ্কটি দেখুন (চেক। সংজ্ঞা- বিভাগ)


4

সি ++ এ এটি সহজ।

std::copy(someStr.c_str(), someStr.c_str()+n, std::ostream_iterator<char>(std::cout, ""));

সম্পাদনা: স্ট্রিং পুনরাবৃত্তকারীগুলির সাথে এটি ব্যবহার করা আরও নিরাপদ, যাতে আপনি শেষের দিকে চলে না। আমি প্রিন্টফ এবং স্ট্রিং যা খুব সংক্ষিপ্ত সেগুলি দিয়ে কী ঘটে তা আমি নিশ্চিত নই, তবে আমার ধারণা এটি নিরাপদ।


32
হা, হ্যাঁ এটি "সহজ"। সি ++ সবসময় গাড়ী দুর্ঘটনার মতো দেখায়।
রাষ্ট্রপতি জেমস কে। পোলক

আপনি এখনও সি ++ তে
প্রিন্টফ

6
আমার মনে হয় এটি ব্যঙ্গাত্মক ছিল। std::cout << someStr.substr(0,8);আরও বেশি স্পষ্ট।
MSalters

2
@ এসএমএলটারদের উত্তর হিসাবে পোস্ট করা উচিত।
জোনাথন মী


1

সি ++ এ, আমি এটি এইভাবে করি:

char *buffer = "My house is nice";
string showMsgStr(buffer, buffer + 5);
std::cout << showMsgStr << std::endl;

দয়া করে মনে রাখবেন এটি নিরাপদ নয় কারণ দ্বিতীয় তর্কটি পাস করার সময় আমি স্ট্রিংয়ের আকারের বাইরে যেতে পারি এবং একটি মেমরি অ্যাক্সেস লঙ্ঘন তৈরি করতে পারি। এটি এড়াতে আপনাকে নিজের চেক প্রয়োগ করতে হবে।

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