[英]Remove all '\' from a string in C
我试图摆脱C中字符串中的所有\\
字符。例如,如果字符串为co\\din\\g
,则应将字符串转换为coding
。
到目前为止,我有代码
for(i = 0; i < strlen(string); ++i){
if(string[i] == '\'){
}
}
看起来是否存在反斜杠。 但是,我不知道如何删除反斜杠。 我唯一的想法是将下一个字符设置为等于当前字符,但是,我不知道更改字符串的长度如何与内存一起工作。
像这样:
#include <stdio.h>
int main(){
char st[] = "co\\din\\g";
int k = 0;
for (int i = 0; st[i] != '\0'; ++i)
if (st[i] != '\\')
st[k++] = st[i];
st[k] = '\0';
fputs(st, stdout);
return 0;
}
这可行。 由于仅删除字符,因此可以写回相同的字符串。 最后,终止符'\\0'
将移至较低的索引,而数组的其余部分将被printf
忽略。 此外, \\
是转义字符,所以要通过\\
本身你必须写\\\\
。
#include <stdio.h>
void nukechar(char s[], char c)
{
size_t j = 0;
for (size_t i = 0; s[i] != '\0'; ++i) {
if (s[i] != c) {
s[j] = s[i];
++j;
}
}
s[j] = '\0';
}
int main(void)
{
char s[200];
while (fgets(s, 200, stdin) != NULL) {
nukechar(s,'\\');
printf("%s", s);
}
return 0;
}
最简单的解决方案是对结果使用第二个字符串:
#include <stdio.h>
#include <string.h>
int main(void)
{
char result[100] = {'\0'}, string[] = "co\\din\\g";
for(int i = 0, j = 0; i < strlen(string); i++)
{
if(string[i] != '\\')
result[j++] = string[i];
}
printf("%s %s\n", result, string);
return 0;
}
结果
$ gcc main.c -o main.exe; ./main.exe; coding co\din\g
注意
必须使用双反斜杠\\\\
,因此反斜杠后面的字符不会被解释为转义序列。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.