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

时间:2017-04-16 17:52:09

标签: c visual-studio

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 我想用^^替换alton tait之间的空间,所以它应该是alton ^^ tait 多数民众赞成我想出来的我不知道我想知道我哪里出错了。谢谢

2 个答案:

答案 0 :(得分:0)

'^^'不是角色。它是一个多字符常量which is not portable

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

SpacePlug(a, '^');

您还需要将打印移出if

int i = 0;
while (*(StringPtr + i)!= '\0')
{
    if (*(StringPtr + i)== ' ')
    {
        *(StringPtr + i ) = '^';
    }
    printf("%c", *(StringPtr + i));
    i++;
}

Demo.

要替换多个角色,您需要采用完全不同的方法:

  • 通过char*替换
  • 确保字符串有足够的空间来扩展额外的字符
  • 两次通过更换
  • 在第一次通过中计算更换后的总长度
  • 从后面开始,使用相同的空间随时执行替换。

答案 1 :(得分:0)

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

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,);

你应该在问题中包含错误报告,这样就可以更容易地看到发生了什么。

您的代码遇到了一些问题:

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

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

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

现在为解决方案。我理解的是“SpacePlug”试图找到字符串中的所有空格,第一个参数,并用一个字符替换它们,这是第二个参数。以下代码适用于此:

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

干杯。