在字符串中的特定字符之后添加字符(最多1个字符串,数组)

时间:2018-11-02 17:20:25

标签: c

我需要在字符串中的每个*之后加上*

Input:*tret*ret*re*ter
Output:**tret**ret**re**ter

嗯,我的代码可以工作,但是问题是我只能使用一个字符串(数组)。 我用了两个。

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

int main() {

    char x[256], y[256], z = 0;

    scanf("%s", x);

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

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

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

    y[z] = '\0';

    printf("%s\n", y);

    system("pause");
    return 0;
}

我将非常感谢您提出仅用一个字符串制作字符串的建议。

我什至尝试过,但它会使炭黑消失

int main() {

    char x[256], z = 0;

    scanf("%s", x);

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



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


    printf("%s\n",x);

    system("pause");
    return 0;
}

3 个答案:

答案 0 :(得分:1)

  

我将非常感谢您提供仅使用一个字符串的建议。

算法

计算'*'-> star_count的出现次数。

请注意字符串的长度-> length

确保length + star_count <256,否则缓冲区太小。

从头到尾循环。

src设置为字符串的结尾。 (空字符)

dest设置为src + star_count的结尾。

// ***

设置* dest =空字符。

未完成(src!=开始):
-分配*dest = *src并递减两个指针。
-有条件地分配*dest = '*',并递减dest


@Ian Abbott提供了很好的改进。循环直到指针匹配。

来自***

同时dest> src
-分配*dest = *src并递减两个指针。
-有条件地分配*dest = '*',并递减dest

答案 1 :(得分:1)

首先,您应该想知道为什么只有一个数组。恕我直言,如果有两个数组更简单,请粘贴在那里。

接下来,您将char用作索引。除非您有充分的理由,否则请不要这样做。一个好的编译器应该警告您,因为它可能导致难以检测到错误。例如,如果您的实现使用带符号的8位char,则最大值为127,而不是255。因此,如果字符串包含128个字符且结尾为null,则循环for (char i = 0; i < strlen(x); i++) {是一个无限循环。因为127 + 1可能是-128(不确定的行为,但很常见)。

并且您知道x数组的大小,应该使用有限的scanf并测试其返回值:

if (scanf("%255s", x) != 1) {
    // process error
    ...
}

对于其他情况,@ chux的答案为您提供了就地扩展字符串的唯一方法:

  • 扫描一次以找到最终尺寸
  • 从头开始处理

答案 2 :(得分:0)

当找到一个*字符时,必须将其后的每个字节向右移,以腾出空间来容纳其他*字符。以下是一种这样的实现:

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

int main(void)
{
    char x[256] = {'\0'}; // NUL Terminate Every Character

    printf("Enter String: ");
    scanf("%s", x);

    for(int i = 0; i < strlen(x); i++)
    {
        if(x[i] == '*')
        {
            for(int j = strlen(x) + 1; j > i; j--)
                x[j] = x[j - 1]; // Shift Every Byte, Starting With Last, To Right
            x[++i] = '*';
        }   
    }

    printf("%s\n", x);
    return 0;
}

执行

Enter String: *hi*buddy*
**hi**buddy**