文字を特定の文字列に連結する文字列を生成しようとしています。
たとえば、私の文字列は「hello」で、文字は「#」です。これらのすべての可能な組み合わせを示す文字列を生成したいと思います。つまり、結果は「hello#」、「he#llo」、「hello#o」などになります。
C を使用してそのような文字列を生成するコードを提供できますか?
ありがとうございます。
文字を特定の文字列に連結する文字列を生成しようとしています。
たとえば、私の文字列は「hello」で、文字は「#」です。これらのすべての可能な組み合わせを示す文字列を生成したいと思います。つまり、結果は「hello#」、「he#llo」、「hello#o」などになります。
C を使用してそのような文字列を生成するコードを提供できますか?
ありがとうございます。
アルゴリズムについて助けが必要です。
文字列がポインタs、で示されているとしますchar *s = "hello";
。
ランダムな位置を決定するには、 stdlibライブラリrand()
から使用できます。Cでは、配列(文字列は文字の配列であるか、文字ポインタによってポイントされます(0バイトで終わります)。いずれの場合も、arr[0]またはptr[0]は最初の文字です)最初のインデックスは0です。したがって、最後の文字は[length-1]にあります。ランダムな位置が0から長さ-1の間であることを確認するには、モジュロ演算子を使用できます。たとえば、ランダムな文字が最後にある可能性があるため、それに1を追加する必要があります。%
int position = rand() % strlen(s);
strlen(s)
s
0からposition-1
(大文字とposition == 0
小文字を区別する)までの部分をtにコピーします(例:strncpy)position == length(s)
それが自分でやりたいことなのか、それとも自分でやりたいことなのかわからない。私の仕事ではない。しかし、それを試してみてください-自分で。わかるでしょ。最初はPITAです。それならとても楽しいです!
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
void print_combinations(char *some_string,char some_char)
{
char *new_string = malloc(strlen(some_string) + 2);
for (unsigned long j = 0; j < (strlen(some_string) + 1); j++)
{
unsigned long i = 0;
unsigned long k = 0;
for (; i < (strlen(some_string) + 1); i++)
{
if (i == j)
{
new_string[i] = some_char;
}
else
{
new_string[i] = some_string[k];
k++;
}
}
new_string[i] = '\0';
printf("pattern %lu: %s\n",j+1,new_string);
}
free(new_string);
}
int main(void)
{
print_combinations("hello",'#');
}
出力:
pattern 1: #hello
pattern 2: h#ello
pattern 3: he#llo
pattern 4: hel#lo
pattern 5: hell#o
pattern 6: hello#
ここで、アルゴリズムがどのように見えるかについてのアイデアの後に.
char *base_string = "hello";
string = calloc(1,sizeof(char));
repeat loop (from i = 0 to length of base_string) {
string = realloc(old size of string + sizeof(base_string) +2) // +2 : 1 for null terminate string and 1 for #
new_insert_position_in_string = string + i * (sizeof(base_string) +1);
reapeat loop (from j = 0 to j< (length of base_string )) {
if (j==i) then {
new_insert_position_in_string[j] = '#';
new_insert_position_in_string++;
continue;
}
new_insert_position_in_string[j] = base_string[j];
}
new_insert_position_in_string[length of base_string + 1] = '#';
}
そして、Cコードを推測するのはあなた次第です