-3

文字を特定の文字列に連結する文字列を生成しようとしています。

たとえば、私の文字列は「hello」で、文字は「#」です。これらのすべての可能な組み合わせを示す文字列を生成したいと思います。つまり、結果は「hello#」、「he#llo」、「hello#o」などになります。

C を使用してそのような文字列を生成するコードを提供できますか?

ありがとうございます。

4

3 に答える 3

1

アルゴリズムについて助けが必要です。

文字列がポインタ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)

  • 上記のように位置を決定します
  • 長さが長さ+2(ランダムな文字と末尾の0が追加されます)のtという名前のchar配列を作成します
  • s0からposition-1(大文字とposition == 0小文字を区別する)までの部分をtにコピーします(例:strncpy
  • ランダムな文字をtに連結します(たとえば、 tは1文字の文字列です。これは簡単ですが、1文字だけを簡単にコピーするトリックがあります...)(例:strcat
  • sの残りの部分をtに連結します。つまり、位置から(大文字と小文字を区別してください) position == length(s)
    • 表示t
  • 広告の吐き気を繰り返す

それが自分でやりたいことなのか、それとも自分でやりたいことなのかわからない。私の仕事ではない。しかし、それを試してみてください-自分で。わかるでしょ。最初はPITAです。それならとても楽しいです!

于 2013-01-10T08:24:33.340 に答える
0
#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#
于 2013-01-10T08:24:35.057 に答える
0

ここで、アルゴリズムがどのように見えるかについてのアイデアの後に.

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コードを推測するのはあなた次第です

于 2013-01-10T08:34:26.323 に答える