我想将'
字符替换为\'
我使用以下代码:
#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*
我的代码中缺少什么?
答案 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
。