【问题标题】:Replacing characters in strings malloc替换字符串 malloc 中的字符
【发布时间】:2013-11-03 15:01:43
【问题描述】:

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

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

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

【问题讨论】:

  • 您的母语中的 cmets 和变量名对我们来说毫无用处。考虑使用英语作为您的主要编程语言。

标签: c string char character


【解决方案1】:

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

一些小提示:

  • 不要在一行中声明多个变量,尤其是当它们的类型不同时。
  • 根据定义,sizeof(char)1mallocchar 的数量计算它分配的大小。
  • 正确缩进您的代码。它不仅让其他人更容易阅读,而且如果您以后重新访问您的代码,您自己也会欣赏它。

【讨论】:

    【解决方案2】:

    string1 声明为char *

    char *string1;  
    

    然后分配内存为

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

    【讨论】:

      【解决方案3】:

      string1 只是一个字符 - 将 string1 声明为 char * 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 的 return - 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);
      }
      

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

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

      【讨论】:

      • 谢谢。对不起,我以为我缩进了它。我做错了什么?
      • 我已经就您的问题发表了我的观点 - 代码没有很好地缩进 - 您正在比较替换 char 与错误的数组,并且您在返回的 char 中获取了 char 类型指针的地址malloc
      猜你喜欢
      • 1970-01-01
      • 2011-12-17
      • 2020-03-08
      • 2011-07-02
      • 2012-04-26
      相关资源
      最近更新 更多