如何将字符随机附加到字符串?

时间:2013-01-10 07:56:01

标签: c random char concatenation

我正在尝试生成一个字符串,将字符连接到给定的字符串。

例如,我的字符串是“hello”,字符是'#'。我想生成一个字符串,显示这些的所有可能组合。即,结果可以是“你好#”,“他#llo”,“地狱#o”等。

你能提供使用C生成这样一个字符串的代码吗?

感谢您的努力。

3 个答案:

答案 0 :(得分:1)

您需要一些算法帮助。

假设字符串由指针 s 指向,char *s = "hello";

要确定随机位置,您可以使用 stdlib 库中的rand()。在C中,数组(字符串是一个字符数组,或由char指针指向(以0字节结尾)。在每种情况下 arr [0] ptr [0] 是第一个char)第一个索引是0.因此最后一个char位于[length-1]。要确保随机位置介于0和length-1之间,您可以使用模%运算符,例如int position = rand() % strlen(s);,但由于随机字符可能位于结尾,因此您需要将1添加到strlen(s)

  • 确定上述位置
  • 创建一个长度为长度为+2的char数组(添加随机字符和结尾0)名为 t
  • s部分从0复制到position-1(谨防position == 0案例)到 t (例如 strncpy
  • 连接到 t 随机字符(比如 t 是一个包含1个字符的字符串,这样会更容易,而有一个技巧可以轻松复制一个字符...)(例如 strcat
  • 连接 t s 的剩余部分,即来自位置(谨防position == length(s)案例)
    • 显示 t
  • 重复 ad nauseum

不知道这是一项任务还是你想要自己做的事情 - 我的业务都不是。但是试一试 - 自己动手吧。你会看到的。起初,它是一个PITA。然后它很有趣!

答案 1 :(得分: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#

答案 2 :(得分: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代码