函数SpacePlug将指向字符串的指针和另一个字符作为参数。

函数SpacePlug将指向字符串的指针和另一个字符作为参数。,c,visual-studio,C,Visual Studio,函数的作用是用字符替换字符串中的每个空格 我想用^^^替换alton tait之间的空格,因此它应该是alton ^^ tait 这就是我想到的我不能我想知道我哪里做错了。谢谢“^^”不是字符。它是一个多字符常量 您的代码适用于单字符替换,即 void SpacePlug(char *StringPtr, char Ch) { int i = 0; while (*(StringPtr + i)!= '\0') { if (*(StringPtr + i)

函数的作用是用字符替换字符串中的每个空格 我想用^^^替换alton tait之间的空格,因此它应该是alton ^^ tait
这就是我想到的我不能我想知道我哪里做错了。谢谢

“^^”
不是字符。它是一个多字符常量

您的代码适用于单字符替换,即

void SpacePlug(char *StringPtr, char Ch)
{
    int i = 0;
    while (*(StringPtr + i)!= '\0')
    {
        if (*(StringPtr + i)== ' ')
        {
            *(StringPtr + i ) = '^^';
            printf("%c",*(StringPtr + i));
        }
        i++;
    }
}
int main()
{
    char a[]= "Alton Tait";
    SpacePlug(a,);
}
如果出现以下情况,您还需要将打印移出

SpacePlug(a, '^');

要替换多个字符,您需要完全不同的方法:

  • 传递替换的
    char*
  • 确保字符串有足够的空间展开以容纳额外的字符
  • 分两次更换
  • 计算第一遍更换后的总长度
  • 从后面开始,使用相同的空间进行替换

这是我尝试使用gcc编译代码时得到的输出:

int i = 0;
while (*(StringPtr + i)!= '\0')
{
    if (*(StringPtr + i)== ' ')
    {
        *(StringPtr + i ) = '^';
    }
    printf("%c", *(StringPtr + i));
    i++;
}
您应该在问题中包含错误报告,以便更容易了解发生了什么

您的代码有一些问题:

  • “^^”不是字符,而是包含2个字符的字符串。“^”是一个人物。这就是“多字符”错误的原因

  • 你没有在SpacePlug中使用“Ch”。替换字符是硬编码的。我总是不存在

  • 在main中未正确调用该函数。它缺少一个参数

现在是解决方案。我所理解的是“SpacePlug”试图找到字符串(第一个参数)中的所有空格,并用字符(第二个参数)替换它们。以下代码可以很好地实现这一点:

In function 'SpacePlug':
8:33: warning: multi-character character constant [-Wmultichar]
             *(StringPtr + i ) = '^^';
                                 ^
8:33: warning: overflow in implicit constant conversion [-Woverflow]
 In function 'main':
17:17: error: expected expression before ')' token
     SpacePlug(a,);
#包括
#包括
#包括
void SpacePlug(char*StringPtr、char Ch、char*newString)
{   
对于(int i=0;i

干杯。

这看起来像C(有语法错误)。你为什么添加C++标签?因为我会接受任何人的帮助。标签不是吸引最大的注意力,而是分类问题!请遵守网站规则,阅读。C和C++是不同的语言。抱歉,双字符^ ^我只需要用一个谢谢你的帮助来真正感谢。我运行它时,它只打印出来。它不打印奥尔顿^。谢谢你的帮助,但是代码没有编译。这个代码不能终止No.<代码> NeXStys<代码>。分配也需要更大才能考虑空值。在这里,我对它进行了编辑,以便将一个新字符串作为参数,而不是在函数中创建它。我初始化内存空间,然后在离开之前销毁它。希望这次能编译。
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

void SpacePlug(char *StringPtr, char Ch, char *newString)
{   
    for (int i = 0; i < strlen(StringPtr); i++)
    {
        if (StringPtr[i] == ' ')
        {
            newString[i] = Ch;
        }
        else
        {
            newString[i] = StringPtr[i];
        }
    }
}
int main()
{
    char *a = "Alton Tait";
    char replace = '^';
    char *newString = (char *)malloc(strlen(a) + 1); // the +1 is for the null terminator
    SpacePlug(a, replace, newString);
    printf("%s\n", newString);

    free(newString);
}