文字列内の特定の文字を、ファイルから読み取ったすべての文字に置き換えようとしています。
たとえば、次のようなすべての置換文字を含むreplace.txtがあります'#'
。'&'.
文字列が「配列」の場合、文字「a」を置換する必要があります。プログラムは次のような組み合わせを生成する必要があります
#rray
#rr&y
#rr#y
&rr&y
&rr#y
&rray
arr#y
arr&y
一度試してみましたが、望ましくない出力が得られます。
ここに私のコードがあります、
int Guess(char str[],char start[],int startPos);
char* replaceChar(char* str, char ch1, char ch2);
void clear(char str[])
{
strcpy(str, "");
}
int size(char str[])
{
return strlen(str);
}
void append(char str[], char c)
{
int len = strlen(str);
str[len] = c;
str[len+1] = '\0';
}
char* replace(char* str, char *orig, char rep,int k)
{
static char buffer[4096];
char *p;
int i,count;
if(!(p = strstr(str, orig)))
return str;
strncpy(buffer, str, p-str+(k-2));
buffer[(p-str)+(k-2)+1] = '\0';
sprintf(buffer+(p-str)+(k-2), "%c%s", rep, p+strlen(orig)+(k-2));
return buffer;
}
long int findfirst(char s[], char c, int k)
{
int i,flag=0;
char* pch;
pch=strchr(s+k-1,c);
return (pch-s+1);
}
char start[1000];
int main()
{
FILE *fp;
fp=fopen("replace.txt","r");
char line[1000];
int i=0;
while (fgets(line, sizeof(line), fp))
{
start[i] = line[0];
i++;
}
printf("%s",start);
printf("\n");
fclose(fp);
char guess[100];
/*---------------------Read Input by Character-----------------------*/
int c;
while ((c = getchar())!=EOF)
{
if (c=='\n')
{
Guess(guess,start,0);
clear(guess);
}
else
{
char c1=(char)c;
append(guess,c1);
}
}
if (size(guess)!=0)
{
Guess(guess,start,0);
}
return 0;
}
int Guess(char* str,char start[],int startPos)
{
char* baseString = str;
int match=1;
int i,j;
char* res;
for (i=startPos; i<strlen(str); i++) //go through the rest of the string looking for replacements
{
if ((findfirst(baseString,'a',i)-1)==i) //replacement
{
for (j=0; j<2; j++) //go through all of the replacements
{
res = replace(baseString,"a",start[j],i);
printf(" res : %s \n",res);//c_str(baseString));
Guess(res,start,i+1);
baseString=str;
}
}
}
return 0;
}
「samba」として入力すると、次のように出力されます。
"#
samba
res : s"mba
res : s"mba (here i need o/p as s"mb")
res : s"mba (here i need o/p as s"mb#)
res : s#mba
res : s#mba (here i need o/p as s#mb")
res : s#mba (here i need o/p as s#mb#)
res : samb"
res : samb#
また、「アルガンダ」として入力すると、
"#
arganda
res : "arganda
res : "ar"
res : "ar#
res : #arganda
res : #ar"
res : #ar#
res : ar"anda
res : ar"an"
res : ar"an#
res : ar#anda
res : ar#an"
res : ar#an#
res : argan"a
res : argan#a
私はこのパターン生成に完全に混乱しています。
誰でもこれに対する解決策を提供できますか?
char[] の代わりに char* を使用する方法についても教えてください。