在字符串中的特定字符之后添加字符

时间:2018-11-02 15:28:07

标签: c

任务是在字符串中的每个*之后添加*

Input:*fsd*fds*fds*f
Output: **fsd**fds**fds**f

我发现了这个问题,我正在尝试将每个*替换为** 但这行不通。

#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include <string.h>

int main() {

    char x[256];

    scanf("%s", &x);

    for (char* p = x; p = strchr(p, '*'); ++p) {
        *p = '*';
    }

    printf("%s", x);

    system("pause");
    return 0;
}

仅当我在此行中使用一个字符时才有效

*p = '*';

但是当我使用更多时它不起作用。

所以*p = '**';不起作用。

2 个答案:

答案 0 :(得分:1)

正如我在评论中提到的那样,当您将*替换为**时,您将写两个字符代替一个字符,因此它将替换*之后的下一个字符。另一种方法是采用另一个空数组并从输入字符串中复制元素,当您发现*时,可以插入两个**。以下代码段显示了一种可能的解决方案。

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

int main() {

    char x[256],y[256];
    unsigned index = 0;

    scanf("%s", x);

    for (unsigned i = 0; i < strlen(x); i++) {

        y[index++] = x[i];

        if(x[i] == '*')
            y[index++] = '*';
    }

    y[index] = '\0';

    printf("%s", y);

    system("pause");
    return 0;
}

答案 1 :(得分:0)

如果您一次只读取一个字符,则编写代码会更容易:

#include <stdio.h>

int main() {
  while (1) {
    int input = fgetc(stdin);
    if (input == EOF) { break; }
    if (input == '*') { fputc('*', stdout); }
    fputc(input, stdout);
  }
}

此外,由于我们不在这里处理内存分配,数组或字符串,因此编写不受缓冲区溢出错误影响的安全代码要容易得多。

注意:C标准的最新版本将return 0;隐式放在main函数的末尾,因此您不必自己编写它。

相关问题