C替换特殊字符

时间:2018-03-28 09:44:55

标签: c

我想将'字符替换为\'我使用以下代码:

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

int main() {
    int i, j = 0;
    char str[] = "HELLO'All";
    char pch[128] = { 0 };

    for (i = 0; i < strlen(str); i++) {
        if (str[i] == '\'') {
            pch[j] = '\\';
            printf(" pch[%d] = *%c* \n", j, pch[j]);
            pch[++j] = str[i];
            continue;          
        }
        pch[j++] = str[i];
    }
    printf("pch = *%s* \n", pch);
    return 0;
} 

我得到了结果:pch = *HELLO\All*
预期结果:pch = *HELLO\'All*
我的代码中缺少什么?

4 个答案:

答案 0 :(得分:3)

您似乎错过了j

的增量

试试这个

  pch[j++]='\\';
  printf(" pch[%d] = *%c* \n",j-1,  pch[j-1]);
  pch[j++]=str[i];

或者像这样

  pch[j]='\\';
  printf(" pch[%d] = *%c* \n",j,  pch[j]);
  ++j;
  pch[j++]=str[i];

答案 1 :(得分:0)

如果您想替换原始字符串'中的撇号(str),只需添加

str[i] = '\\';

开头的if块中的

if(str[i]=='\'')

答案 2 :(得分:0)

这会奏效。只有很小的变化。由于它是一个char数组,你不能添加字符串。

public class MainActivity extends AppCompatActivity {
    private static final String IDENTITY_TAG = "MainActivity";

    @BindView(R.id.btnOpen)
    Button btnOpen;
    @BindView(R.id.btnClose)
    Button btnClose;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        ButterKnife.bind(this);
    }

    @OnClick(R.id.btnOpen) 
    public void startSomething() {
        Toast.makeText(MainActivity.this, "startSomething", Toast.LENGTH_SHORT).show();
    }

    @OnClick(R.id.btnClose) 
    public void endSomething() {
        Toast.makeText(MainActivity.this, "endSomething", Toast.LENGTH_SHORT).show();
    }
}

答案 3 :(得分:0)

当您插入j时,您忘记第二次增加\

以下是更正后的简化版本:

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

int main() {
    int i, j;
    char str[] = "HELLO'All";
    char pch[128];

    for (i = j = 0, str[i] != '\0'; i++) {
        if (str[i] == '\'') {
            pch[j++] = '\\';
        }
        pch[j++] = str[i];
    }
    pch[j] = '\0';
    printf("pch = *%s*\n", pch);
    return 0;
}

请注意,您还应该将\替换为\\,并且应该检查目标数组是否足够大(发布的代码没有问题,但需要比较更常规的例程{ {1}}大小为j