একটি ( char *
) স্ট্রিং দেওয়া, আমি একটি স্ট্রিংয়ের সমস্ত উপস্থিতি সন্ধান করতে এবং একটি বিকল্প স্ট্রিং দিয়ে তাদের প্রতিস্থাপন করতে চাই। এটিকে অর্জন করে এমন কোনও সাধারণ কাজ আমি দেখতে পাচ্ছি না <string.h>
।
একটি ( char *
) স্ট্রিং দেওয়া, আমি একটি স্ট্রিংয়ের সমস্ত উপস্থিতি সন্ধান করতে এবং একটি বিকল্প স্ট্রিং দিয়ে তাদের প্রতিস্থাপন করতে চাই। এটিকে অর্জন করে এমন কোনও সাধারণ কাজ আমি দেখতে পাচ্ছি না <string.h>
।
উত্তর:
অপ্টিমাইজারটি স্থানীয় ভেরিয়েবলের বেশিরভাগ অপসারণ করা উচিত। টিএমপি পয়েন্টারটি আছে নিশ্চিত করার জন্য যে শূন্য অনুসন্ধানের জন্য স্ট্রিংকে স্ট্রিংকে হাঁটাতে হবে না। tmp প্রতিটি কলের পরে ফলাফলের শেষে নির্দেশ করে। ( স্ট্রাইকপি কেন বিরক্তিকর হতে পারে তার জন্য চিত্রকরের অ্যালগরিদম শ্লেমিয়েল দেখুন ))
// You must free the result if result is non-NULL.
char *str_replace(char *orig, char *rep, char *with) {
char *result; // the return string
char *ins; // the next insert point
char *tmp; // varies
int len_rep; // length of rep (the string to remove)
int len_with; // length of with (the string to replace rep with)
int len_front; // distance between rep and end of last rep
int count; // number of replacements
// sanity checks and initialization
if (!orig || !rep)
return NULL;
len_rep = strlen(rep);
if (len_rep == 0)
return NULL; // empty rep causes infinite loop during count
if (!with)
with = "";
len_with = strlen(with);
// count the number of replacements needed
ins = orig;
for (count = 0; tmp = strstr(ins, rep); ++count) {
ins = tmp + len_rep;
}
tmp = result = malloc(strlen(orig) + (len_with - len_rep) * count + 1);
if (!result)
return NULL;
// first time through the loop, all the variable are set correctly
// from here on,
// tmp points to the end of the result string
// ins points to the next occurrence of rep in orig
// orig points to the remainder of orig after "end of rep"
while (count--) {
ins = strstr(orig, rep);
len_front = ins - orig;
tmp = strncpy(tmp, orig, len_front) + len_front;
tmp = strcpy(tmp, with) + len_with;
orig += len_front + len_rep; // move to next "end of rep"
}
strcpy(tmp, orig);
return result;
}
size_t
পরিবর্তে ব্যবহার int
করুন। এছাড়াও, strcpy(tmp, orig);
একেবারে শেষের উদ্দেশ্য কী ? ভুল মনে হচ্ছে।
for
লুপটি প্রতিস্থাপন করতে পারেন for (count = 1; ins = strstr(ins + rep_len, rep); ++count) {}
, তারপরে tmp
কেবল লেখার জন্য ব্যবহৃত হয়।
এটি স্ট্যান্ডার্ড সি লাইব্রেরিতে সরবরাহ করা হয়নি কারণ কেবলমাত্র একটি চর দেওয়া * যদি প্রতিস্থাপন স্ট্রিংটি স্ট্রিং প্রতিস্থাপনের চেয়ে দীর্ঘ হয় তবে স্ট্রিংকে বরাদ্দ করা মেমরিটি আপনি বাড়িয়ে তুলতে পারবেন না।
আপনি আরও সহজেই স্টাডি :: স্ট্রিং ব্যবহার করে এটি করতে পারেন, তবে সেখানে কোনও একক কার্য আপনার জন্য এটি করবে না।
একটিও নেই
আপনাকে স্টারস্টার এবং স্ট্রিকাট বা আরআরপিপি জাতীয় কিছু ব্যবহার করে নিজের রোল করতে হবে ।
strcat()
একটি খারাপ পরামর্শ।
আপনি স্ট্রাস্টার ব্যবহার করে আপনার নিজের প্রতিস্থাপন ফাংশনটি তৈরি করতে পারেন সাবস্ট্রিংগুলি এবং নতুন বাফার অংশে অনুলিপি করার জন্য স্ট্রঙ্কপি।
আপনি যা চান replace_with
তার দৈর্ঘ্য যদি না আপনি চান replace
তবে তারপরে নতুন স্ট্রিংটি অনুলিপি করতে কোনও নতুন বাফার ব্যবহার করা ভাল।
যেহেতু সি তে স্ট্রিংগুলি গতিশীলভাবে বাড়তে পারে না স্থান প্রতিস্থাপনটি সাধারণত কাজ করবে না। সুতরাং আপনাকে নতুন স্ট্রিংয়ের জন্য জায়গা বরাদ্দ করতে হবে যাতে আপনার প্রতিস্থাপনের জন্য পর্যাপ্ত জায়গা রয়েছে এবং তারপরে মূল প্লাস থেকে বিকল্পটিকে নতুন স্ট্রিংয়ে অনুলিপি করতে হবে। অংশগুলি অনুলিপি করতে আপনি strncpy ব্যবহার করবেন ।
এখানে কিছু নমুনা কোড যা এটি করে।
#include <string.h>
#include <stdlib.h>
char * replace(
char const * const original,
char const * const pattern,
char const * const replacement
) {
size_t const replen = strlen(replacement);
size_t const patlen = strlen(pattern);
size_t const orilen = strlen(original);
size_t patcnt = 0;
const char * oriptr;
const char * patloc;
// find how many times the pattern occurs in the original string
for (oriptr = original; patloc = strstr(oriptr, pattern); oriptr = patloc + patlen)
{
patcnt++;
}
{
// allocate memory for the new string
size_t const retlen = orilen + patcnt * (replen - patlen);
char * const returned = (char *) malloc( sizeof(char) * (retlen + 1) );
if (returned != NULL)
{
// copy the original string,
// replacing all the instances of the pattern
char * retptr = returned;
for (oriptr = original; patloc = strstr(oriptr, pattern); oriptr = patloc + patlen)
{
size_t const skplen = patloc - oriptr;
// copy the section until the occurence of the pattern
strncpy(retptr, oriptr, skplen);
retptr += skplen;
// copy the replacement
strncpy(retptr, replacement, replen);
retptr += replen;
}
// copy the rest of the string.
strcpy(retptr, oriptr);
}
return returned;
}
}
#include <stdio.h>
int main(int argc, char * argv[])
{
if (argc != 4)
{
fprintf(stderr,"usage: %s <original text> <pattern> <replacement>\n", argv[0]);
exit(-1);
}
else
{
char * const newstr = replace(argv[1], argv[2], argv[3]);
if (newstr)
{
printf("%s\n", newstr);
free(newstr);
}
else
{
fprintf(stderr,"allocation error\n");
exit(-2);
}
}
return 0;
}
// Here is the code for unicode strings!
int mystrstr(wchar_t *txt1,wchar_t *txt2)
{
wchar_t *posstr=wcsstr(txt1,txt2);
if(posstr!=NULL)
{
return (posstr-txt1);
}else
{
return -1;
}
}
// assume: supplied buff is enough to hold generated text
void StringReplace(wchar_t *buff,wchar_t *txt1,wchar_t *txt2)
{
wchar_t *tmp;
wchar_t *nextStr;
int pos;
tmp=wcsdup(buff);
pos=mystrstr(tmp,txt1);
if(pos!=-1)
{
buff[0]=0;
wcsncpy(buff,tmp,pos);
buff[pos]=0;
wcscat(buff,txt2);
nextStr=tmp+pos+wcslen(txt1);
while(wcslen(nextStr)!=0)
{
pos=mystrstr(nextStr,txt1);
if(pos==-1)
{
wcscat(buff,nextStr);
break;
}
wcsncat(buff,nextStr,pos);
wcscat(buff,txt2);
nextStr=nextStr+pos+wcslen(txt1);
}
}
free(tmp);
}
Repl_str () creativeandcritical.net উপর ফাংশন দ্রুত এবং নির্ভরযোগ্য। সেই পৃষ্ঠায় অন্তর্ভুক্ত করা হয়েছে একটি বিস্তৃত স্ট্রিং বৈকল্পিক, repl_wcs () , যা ইউটিএফ -8 এ এনকোডযুক্ত সহ ইউনিকোড স্ট্রিং সহ সহায়ক ফাংশনগুলির মাধ্যমে ব্যবহার করা যেতে পারে - পৃষ্ঠা থেকে ডেমো কোডটি সংযুক্ত রয়েছে। বিলম্বিত পূর্ণ প্রকাশ: আমি সেই পৃষ্ঠাটির লেখক এবং এর কার্যকারিতা।
pos_cache = realloc(pos_cache
free(pos_cache);
যা ফাংশন শেষে এড়িয়ে চলে ।
realloc
ব্যর্থ হতে পারে। যদি এটি হয় তবে এটি NULL
পুরানো পয়েন্টারটি অক্ষত রেখে দেয় leaves p = realloc(p, x)
, ব্যর্থতা উপর, একটি বৈধ গাদা পয়েন্টার পুনর্লিখন করতে হবে p
সঙ্গে NULL
, এবং যে যদি p
যে গাদা বস্তু আপনার শুধুমাত্র রেফারেন্সের ছিল, আপনি কি এখন এটি ফাঁস করেছি। এটি একটি ক্লাসিক নবাগত ভুল।
প্রস্তাবিত ফাংশনগুলির বেশিরভাগটি আমার পক্ষে বুঝতে শক্ত হয় - তাই আমি এটি নিয়ে এসেছি:
static char *dull_replace(const char *in, const char *pattern, const char *by)
{
size_t outsize = strlen(in) + 1;
// TODO maybe avoid reallocing by counting the non-overlapping occurences of pattern
char *res = malloc(outsize);
// use this to iterate over the output
size_t resoffset = 0;
char *needle;
while (needle = strstr(in, pattern)) {
// copy everything up to the pattern
memcpy(res + resoffset, in, needle - in);
resoffset += needle - in;
// skip the pattern in the input-string
in = needle + strlen(pattern);
// adjust space for replacement
outsize = outsize - strlen(pattern) + strlen(by);
res = realloc(res, outsize);
// copy the pattern
memcpy(res + resoffset, by, strlen(by));
resoffset += strlen(by);
}
// copy the remaining input
strcpy(res + resoffset, in);
return res;
}
আউটপুট অবশ্যই ফ্রিড করা উচিত
আপনি এই ফাংশনটি ব্যবহার করতে পারেন (মন্তব্যগুলি এটি কীভাবে কাজ করে তা ব্যাখ্যা করে):
void strreplace(char *string, const char *find, const char *replaceWith){
if(strstr(string, replaceWith) != NULL){
char *temporaryString = malloc(strlen(strstr(string, find) + strlen(find)) + 1);
strcpy(temporaryString, strstr(string, find) + strlen(find)); //Create a string with what's after the replaced part
*strstr(string, find) = '\0'; //Take away the part to replace and the part after it in the initial string
strcat(string, replaceWith); //Concat the first part of the string with the part to replace with
strcat(string, temporaryString); //Concat the first part of the string with the part after the replaced part
free(temporaryString); //Free the memory to avoid memory leaks
}
}
এই প্রয়োজনীয়তার উপর ভিত্তি করে আমি এটি তৈরি করেছি:
দীর্ঘ বা খাটো ছিল তা নির্বিশেষে প্যাটার্নটি প্রতিস্থাপন করুন।
অভ্যন্তরীণভাবে মেমরি ফাঁস এড়াতে কোনও ম্যালোক (স্পষ্ট বা অন্তর্নিহিত) ব্যবহার করবেন না।
প্যাটার্নের যে কোনও সংখ্যক সংঘটন প্রতিস্থাপন করুন।
অনুসন্ধান স্ট্রিংয়ের সমান একটি সাবস্ট্রিং থাকা প্রতিস্থাপন স্ট্রিং সহ্য করুন।
প্রতিস্থাপনটি ধরে রাখতে লাইন অ্যারে আকারে যথেষ্ট কিনা তা পরীক্ষা করে দেখতে হবে না। উদাহরণস্বরূপ, কলারটি জানতে না পারে যে নতুন স্ট্রিং ধরে রাখতে লাইনটি যথেষ্ট পরিমাণে রয়েছে।
/* returns number of strings replaced.
*/
int replacestr(char *line, const char *search, const char *replace)
{
int count;
char *sp; // start of pattern
//printf("replacestr(%s, %s, %s)\n", line, search, replace);
if ((sp = strstr(line, search)) == NULL) {
return(0);
}
count = 1;
int sLen = strlen(search);
int rLen = strlen(replace);
if (sLen > rLen) {
// move from right to left
char *src = sp + sLen;
char *dst = sp + rLen;
while((*dst = *src) != '\0') { dst++; src++; }
} else if (sLen < rLen) {
// move from left to right
int tLen = strlen(sp) - sLen;
char *stop = sp + rLen;
char *src = sp + sLen + tLen;
char *dst = sp + rLen + tLen;
while(dst >= stop) { *dst = *src; dst--; src--; }
}
memcpy(sp, replace, rLen);
count += replacestr(sp + rLen, search, replace);
return(count);
}
এই কোডটি উন্নত করার জন্য কোনও পরামর্শ আনন্দের সাথে গ্রহণ করা হয়েছে। শুধু মন্তব্য পোস্ট করুন এবং আমি এটি পরীক্ষা করব।
এখানে আমার যায়, তাদের সবাইকে * বানান, যা কল করা সহজ করে ...
char *strrpc(char *str,char *oldstr,char *newstr){
char bstr[strlen(str)];
memset(bstr,0,sizeof(bstr));
int i;
for(i = 0;i < strlen(str);i++){
if(!strncmp(str+i,oldstr,strlen(oldstr))){
strcat(bstr,newstr);
i += strlen(oldstr) - 1;
}else{
strncat(bstr,str + i,1);
}
}
strcpy(str,bstr);
return str;
}
আপনি স্ট্র্যাপ () ব্যবহার করতে পারেন
চর * স্ট্রাইপ (কনস্ট চর * ক্যাডেনা, কনস্ট চর * স্ট্র্যাফ, কনস্ট চর * আরআর)
স্ট্রাইপ (স্ট্রিং রিপ্লেস)। 'ক্রেডেনা'-তে' strr 'এর সাথে' strf 'প্রতিস্থাপন করে এবং নতুন স্ট্রিংটি ফেরত দেয় returns স্ট্রিপ ব্যবহারের পরে আপনাকে আপনার কোডটিতে ফিরে আসা স্ট্রিংটি মুক্ত করতে হবে।
পরামিতি ক্যাডেনা পাঠ্যের সাথে স্ট্রিং। strf পাঠ্য। strr প্রতিস্থাপন পাঠ্য।
ফেরত পাঠ্য আপডেট প্রতিস্থাপন বুদ্ধিমান।
প্রকল্পটি https://github.com/ipserc/strrep এ পাওয়া যাবে
ফ্যান 95 এর প্রতিক্রিয়া সংশোধন, স্ট্রিং-এর স্থান-পরিবর্তন পরিবর্তন ব্যবহার করে এবং লাইন দ্বারা নির্দেশিত বাফার ধরে নেওয়া ফলাফলের স্ট্রিং ধরে রাখতে যথেষ্ট বড়।
static void replacestr(char *line, const char *search, const char *replace)
{
char *sp;
if ((sp = strstr(line, search)) == NULL) {
return;
}
int search_len = strlen(search);
int replace_len = strlen(replace);
int tail_len = strlen(sp+search_len);
memmove(sp+replace_len,sp+search_len,tail_len+1);
memcpy(sp, replace, replace_len);
}
আপনি সেখানে যান .... এই ফাংশন প্রতিটি occurance প্রতিস্থাপন করতে হয় char x
সঙ্গে char y
অক্ষর স্ট্রিং মধ্যেstr
char *zStrrep(char *str, char x, char y){
char *tmp=str;
while(*tmp)
if(*tmp == x)
*tmp++ = y; /* assign first, then incement */
else
*tmp++;
*tmp='\0';
return str;
}
একটি উদাহরণ ব্যবহার হতে পারে
Exmaple Usage
char s[]="this is a trial string to test the function.";
char x=' ', y='_';
printf("%s\n",zStrrep(s,x,y));
Example Output
this_is_a_trial_string_to_test_the_function.
ফাংশনটি আমি গিথুবে রক্ষণ করি এমন স্ট্রিং লাইব্রেরি থেকে , অন্যান্য উপলভ্য ক্রিয়াকলাপগুলিতে নজর দেওয়া বা কোডটিতে অবদান রাখার জন্য আপনাকে স্বাগত জানানো অপেক্ষা অনেক বেশি :)
https://github.com/fnoyanisi/zString
সম্পাদনা: @ সিরাইড ঠিক আছে, উপরের ফাংশনটি কেবল অক্ষরকে প্রতিস্থাপন করে। সবেমাত্র এটি লিখেছেন, যা চরিত্রের স্ট্রিংগুলির প্রতিস্থাপন করে।
#include <stdio.h>
#include <stdlib.h>
/* replace every occurance of string x with string y */
char *zstring_replace_str(char *str, const char *x, const char *y){
char *tmp_str = str, *tmp_x = x, *dummy_ptr = tmp_x, *tmp_y = y;
int len_str=0, len_y=0, len_x=0;
/* string length */
for(; *tmp_y; ++len_y, ++tmp_y)
;
for(; *tmp_str; ++len_str, ++tmp_str)
;
for(; *tmp_x; ++len_x, ++tmp_x)
;
/* Bounds check */
if (len_y >= len_str)
return str;
/* reset tmp pointers */
tmp_y = y;
tmp_x = x;
for (tmp_str = str ; *tmp_str; ++tmp_str)
if(*tmp_str == *tmp_x) {
/* save tmp_str */
for (dummy_ptr=tmp_str; *dummy_ptr == *tmp_x; ++tmp_x, ++dummy_ptr)
if (*(tmp_x+1) == '\0' && ((dummy_ptr-str+len_y) < len_str)){
/* Reached end of x, we got something to replace then!
* Copy y only if there is enough room for it
*/
for(tmp_y=y; *tmp_y; ++tmp_y, ++tmp_str)
*tmp_str = *tmp_y;
}
/* reset tmp_x */
tmp_x = x;
}
return str;
}
int main()
{
char s[]="Free software is a matter of liberty, not price.\n"
"To understand the concept, you should think of 'free' \n"
"as in 'free speech', not as in 'free beer'";
printf("%s\n\n",s);
printf("%s\n",zstring_replace_str(s,"ree","XYZ"));
return 0;
}
এবং নীচে আউটপুট হয়
Free software is a matter of liberty, not price.
To understand the concept, you should think of 'free'
as in 'free speech', not as in 'free beer'
FXYZ software is a matter of liberty, not price.
To understand the concept, you should think of 'fXYZ'
as in 'fXYZ speech', not as in 'fXYZ beer'
/*замена символа в строке*/
char* replace_char(char* str, char in, char out) {
char * p = str;
while(p != '\0') {
if(*p == in)
*p == out;
++p;
}
return str;
}
DWORD ReplaceString(__inout PCHAR source, __in DWORD dwSourceLen, __in const char* pszTextToReplace, __in const char* pszReplaceWith)
{
DWORD dwRC = NO_ERROR;
PCHAR foundSeq = NULL;
PCHAR restOfString = NULL;
PCHAR searchStart = source;
size_t szReplStrcLen = strlen(pszReplaceWith), szRestOfStringLen = 0, sztextToReplaceLen = strlen(pszTextToReplace), remainingSpace = 0, dwSpaceRequired = 0;
if (strcmp(pszTextToReplace, "") == 0)
dwRC = ERROR_INVALID_PARAMETER;
else if (strcmp(pszTextToReplace, pszReplaceWith) != 0)
{
do
{
foundSeq = strstr(searchStart, pszTextToReplace);
if (foundSeq)
{
szRestOfStringLen = (strlen(foundSeq) - sztextToReplaceLen) + 1;
remainingSpace = dwSourceLen - (foundSeq - source);
dwSpaceRequired = szReplStrcLen + (szRestOfStringLen);
if (dwSpaceRequired > remainingSpace)
{
dwRC = ERROR_MORE_DATA;
}
else
{
restOfString = CMNUTIL_calloc(szRestOfStringLen, sizeof(CHAR));
strcpy_s(restOfString, szRestOfStringLen, foundSeq + sztextToReplaceLen);
strcpy_s(foundSeq, remainingSpace, pszReplaceWith);
strcat_s(foundSeq, remainingSpace, restOfString);
}
CMNUTIL_free(restOfString);
searchStart = foundSeq + szReplStrcLen; //search in the remaining str. (avoid loops when replWith contains textToRepl
}
} while (foundSeq && dwRC == NO_ERROR);
}
return dwRC;
}
char *replace(const char*instring, const char *old_part, const char *new_part)
{
#ifndef EXPECTED_REPLACEMENTS
#define EXPECTED_REPLACEMENTS 100
#endif
if(!instring || !old_part || !new_part)
{
return (char*)NULL;
}
size_t instring_len=strlen(instring);
size_t new_len=strlen(new_part);
size_t old_len=strlen(old_part);
if(instring_len<old_len || old_len==0)
{
return (char*)NULL;
}
const char *in=instring;
const char *found=NULL;
size_t count=0;
size_t out=0;
size_t ax=0;
char *outstring=NULL;
if(new_len> old_len )
{
size_t Diff=EXPECTED_REPLACEMENTS*(new_len-old_len);
size_t outstring_len=instring_len + Diff;
outstring =(char*) malloc(outstring_len);
if(!outstring){
return (char*)NULL;
}
while((found = strstr(in, old_part))!=NULL)
{
if(count==EXPECTED_REPLACEMENTS)
{
outstring_len+=Diff;
if((outstring=realloc(outstring,outstring_len))==NULL)
{
return (char*)NULL;
}
count=0;
}
ax=found-in;
strncpy(outstring+out,in,ax);
out+=ax;
strncpy(outstring+out,new_part,new_len);
out+=new_len;
in=found+old_len;
count++;
}
}
else
{
outstring =(char*) malloc(instring_len);
if(!outstring){
return (char*)NULL;
}
while((found = strstr(in, old_part))!=NULL)
{
ax=found-in;
strncpy(outstring+out,in,ax);
out+=ax;
strncpy(outstring+out,new_part,new_len);
out+=new_len;
in=found+old_len;
}
}
ax=(instring+instring_len)-in;
strncpy(outstring+out,in,ax);
out+=ax;
outstring[out]='\0';
return outstring;
}
আপনার স্ট্রিংয়ে নতুন দৈর্ঘ্যের জন্য অতিরিক্ত জায়গা থাকলে এই ফাংশনটি কেবলমাত্র কার্যকর হয়
void replace_str(char *str,char *org,char *rep)
{
char *ToRep = strstr(str,org);
char *Rest = (char*)malloc(strlen(ToRep));
strcpy(Rest,((ToRep)+strlen(org)));
strcpy(ToRep,rep);
strcat(ToRep,Rest);
free(Rest);
}
এটি কেবল প্রথম ঘটনাকে প্রতিস্থাপন করে
এখানে আমার যায়, এটি স্ব অন্তর্ভুক্ত এবং বহুমুখী, পাশাপাশি দক্ষ, এটি প্রতিটি পুনরাবৃত্তির প্রয়োজন অনুসারে বাফারগুলি বাড়ায় বা সঙ্কুচিত করে
void strreplace(char *src, char *str, char *rep)
{
char *p = strstr(src, str);
if (p)
{
int len = strlen(src)+strlen(rep)-strlen(str);
char r[len];
memset(r, 0, len);
if ( p >= src ){
strncpy(r, src, p-src);
r[p-src]='\0';
strncat(r, rep, strlen(rep));
strncat(r, p+strlen(str), p+strlen(str)-src+strlen(src));
strcpy(src, r);
strreplace(p+strlen(rep), str, rep);
}
}
}
স্ট্রিং। Hr থেকে কেবল স্ট্রেন ব্যবহার করা
আমার ইংরেজীর জন্য দুঃখিত
char * str_replace(char * text,char * rep, char * repw){//text -> to replace in it | rep -> replace | repw -> replace with
int replen = strlen(rep),repwlen = strlen(repw),count;//some constant variables
for(int i=0;i<strlen(text);i++){//search for the first character from rep in text
if(text[i] == rep[0]){//if it found it
count = 1;//start searching from the next character to avoid repetition
for(int j=1;j<replen;j++){
if(text[i+j] == rep[j]){//see if the next character in text is the same as the next in the rep if not break
count++;
}else{
break;
}
}
if(count == replen){//if count equals to the lenght of the rep then we found the word that we want to replace in the text
if(replen < repwlen){
for(int l = strlen(text);l>i;l--){//cuz repwlen greater than replen we need to shift characters to the right to make space for the replacement to fit
text[l+repwlen-replen] = text[l];//shift by repwlen-replen
}
}
if(replen > repwlen){
for(int l=i+replen-repwlen;l<strlen(text);l++){//cuz replen greater than repwlen we need to shift the characters to the left
text[l-(replen-repwlen)] = text[l];//shift by replen-repwlen
}
text[strlen(text)-(replen-repwlen)] = '\0';//get rid of the last unwanted characters
}
for(int l=0;l<repwlen;l++){//replace rep with repwlen
text[i+l] = repw[l];
}
if(replen != repwlen){
i+=repwlen-1;//pass to the next character | try text "y" ,rep "y",repw "yy" without this line to understand
}
}
}
}
return text;
}
আপনি যদি স্ট্রেন.কে কলিং এড়ানোর জন্য স্ট্রেন কোড চান
int strlen(char * string){//use this code to avoid calling string.h
int lenght = 0;
while(string[lenght] != '\0'){
lenght++;
}
return lenght;
}