0

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

#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);
}

如果您愿意提供任何帮助,我将不胜感激。

4

3 回答 3

1

你的声明string1是错误的。它不应该是一个char,而是一个指向char,的指针char*。然后你也不会想强制转换的返回值malloc

一些小提示:

  • 不要在一行中声明多个变量,尤其是当它们的类型不同时。
  • 根据定义sizeof(char)1malloc计算它分配的大小char
  • 正确缩进你的代码。它不仅使它对其他人更具可读性,而且如果您稍后重新访问您的代码,您自己也会欣赏它。
于 2013-11-03T15:04:49.700 回答
0

声明string1char *

char *string1;  

然后分配内存为

string1 = malloc ((l + 1)*sizeof(char));
于 2013-11-03T15:06:12.713 回答
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);
}

如果您愿意提供任何帮助,我将不胜感激。

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

于 2013-11-03T15:07:40.963 回答