আমি কীভাবে মিশ্রিত কেস স্ট্রিংকে সি এর একটি ছোট হাতের স্ট্রিংয়ে রূপান্তর করতে পারি?
strlwr((char*)str);
এটি কেবল স্ট্রিংয়ের মধ্য দিয়ে যায় এবং এটিকে নিজেই রূপান্তর করে।
আমি কীভাবে মিশ্রিত কেস স্ট্রিংকে সি এর একটি ছোট হাতের স্ট্রিংয়ে রূপান্তর করতে পারি?
strlwr((char*)str);
এটি কেবল স্ট্রিংয়ের মধ্য দিয়ে যায় এবং এটিকে নিজেই রূপান্তর করে।
উত্তর:
এটি স্ট্যান্ডার্ড লাইব্রেরিতে রয়েছে এবং এ জাতীয় ফাংশনটি বাস্তবায়নের জন্য আমি দেখতে সবচেয়ে সোজা এগিয়ে forward হ্যাঁ, কেবল স্ট্রিংটির মধ্য দিয়ে লুপ করুন এবং প্রতিটি অক্ষরকে ছোট হাতের মধ্যে রূপান্তর করুন।
এর মতো তুচ্ছ কিছু:
#include <ctype.h>
for(int i = 0; str[i]; i++){
str[i] = tolower(str[i]);
}
বা যদি আপনি একটি লাইনার পছন্দ করেন তবে আপনি এটি জেএফ সেবাস্তিয়ান দ্বারা ব্যবহার করতে পারেন:
for ( ; *p; ++p) *p = tolower(*p);
for ( ; *p; ++p) *p = tolower(*p);
আরও বুদ্ধিমান মনে হয়।
char *
, তবে স্ট্র্ট একটি চর অ্যারে নয়। এর জন্য কোনও ব্যাখ্যা পেয়েছেন?
যদি আপনি নিজেকে ASCII- এ সীমাবদ্ধ রাখেন তবে লোয়ার কেসে রূপান্তর করা বিট 0x60 এর সমান:
for(char *p = pstr; *p; ++p)
*p = *p > 0x40 && *p < 0x5b ? *p | 0x60 : *p;
for(char *p = pstr;*p;++p) *p=*p>='A'&&*p<='Z'?*p|0x60:*p;
tolower()
। 55.2 বনাম 44.15 আমার মেশিনে।
int (*)(int)
স্বাক্ষর রয়েছে। পারফরম্যান্স পরিমাপের জন্য ব্যবহার করা কোডটি এখানে gist.github.com/370497
আপনি কি কেবল এএসসিআইআই স্ট্রিং নিয়ে কাজ করছেন, এবং কোনও স্থানীয় সমস্যা নেই? তাহলে হ্যাঁ, এটি করার ভাল উপায় হবে।
tolower()
যুক্তিটি 'এ' .. 'জেড' সীমার মধ্যে না থাকলে অপরিবর্তিত রাখে।
আপনার যদি লোয়ার কেস ফাংশনে ইউনিকোড সমর্থন প্রয়োজন হয় তবে এই প্রশ্নটি দেখুন: লাইট সি ইউনিকোড লাইব্রেরি
আমরা যদি ব্যবহার করার মতো ঝাল হয়ে যাচ্ছি তবে tolower()
এটি করুন:
char blah[] = "blah blah Blah BLAH blAH\0"; int i=0; while(blah[i]|=' ', blah[++i]) {}
তবে, ভাল, আপনি কিছু চিহ্ন বা সংখ্যা খাওয়ান, তবে সাধারণভাবে এটি মন্দ evil ভাল সাক্ষাত্কার প্রশ্ন, যদিও।