替换字符串malloc中的字符

时间:2013-11-03 15:01:44

标签: c string char character

给定一个字符串和两个字符,我想找到第一个字符存在于字符串上的次数,它首先出现在什么位置并创建一个新字符串,其中第二个字符每次显示时替换第一个字符,但是我在最后一部分遇到了问题。这就是我到目前为止所做的:

#include <stdio.h>
#include <string.h>
#include <stdlib.h>

main ()
{
    char string[10], string1;
    char c1, c2;
    int contador, i, l, n, contador2;

    printf ("Introduza uma string e dois caracteres.\n");
    scanf ("%s %c %c", string, &c1, &c2);

    l = strlen (string);
    contador = 0;

    for (n = 0; n < l; n++)
    {
        if (c1 == string[n])
        {
            contador = contador + 1;
        }
    }
    for (n = 0; n < l; n++)
    { 
        if (c1 == string[n])
        {
            contador2 = n + 1; /*Dá-se o valor de n + 1 à variável contador2 porque n começa em 0*/
            break;
        }
    }

    string1 = (char) malloc ((l +1)*sizeof(char));

    for (n = 0; n < l; n++)
    {
        if (c1 == string1[n])
        {
            n = c2;
        }
    }
    printf ("%d\n", contador);
    printf ("%d\n", contador2);
    printf ("%s", string1);
}

我很感激您提供的任何帮助。

3 个答案:

答案 0 :(得分:1)

您对string1的声明是错误的。它不应该是char,而是指向charchar*的指针。那么你也不会想要转换malloc的返回值。

一些小提示:

  • 不要在一行中声明多个变量,特别是如果它们的类型不同。
  • 根据定义,sizeof(char)1malloc计算其分配的大小char
  • 正确缩进代码。它不仅使其对其他人更具可读性,而且如果您稍后重新访问代码,也会自己感激。

答案 1 :(得分:0)

string1声明为char *

char *string1;  

然后将内存分配为

string1 = malloc ((l + 1)*sizeof(char));

答案 2 :(得分:0)

string1只是一个字母 - 声明string1char * string1。你替换字符的for循环也搞砸了。它应该是:

 for (n = 0; n < l; n++)
 {
      if (c1 == string[n])// You should compare with string and not string1
      {
           string1[n] = c2;
      }
      else 
           string1[n]=string[n];
 }

此外,无需在C中转换malloc返回 - malloc返回void*。您的完整更正代码:

#include <stdio.h>
#include <string.h>
#include <stdlib.h>

int main ()
{
    char string[10],* string1;
    char c1, c2;
    int contador, i, l, n, contador2;

    printf ("Introduza uma string e dois caracteres.\n");
    scanf ("%s %c %c", string, &c1, &c2);

    l = strlen (string);
    contador = 0;

    for (n = 0; n < l; n++)
    {
        if (c1 == string[n])
        {
              contador = contador + 1;
        }
    }
    for (n = 0; n < l; n++)
    { 
        if (c1 == string[n])
        {
              contador2 = n + 1; /*Dá-se o valor de n + 1 à variável contador2 porque n começa em 0*/
             break;
        }
    }

  string1 =  malloc ((l +1)*sizeof(char));

  for (n = 0; n < l; n++)
  {
      if (c1 == string[n])
      {
          string1[n] = c2;
      }
    else 
         string1[n]=string[n];
  }
  printf ("%d\n", contador);
  printf ("%d\n", contador2);
  printf ("%s", string1);
}
  

我很感激您提供的任何帮助。

请开始缩进代码。缩进比解决问题花了我更多时间。