if (ch == '\\')
{
escape_ch = '\\\\';
}
编译器对4个反斜杠不满意,但我需要能够将'\\'
作为一个字符。 C读取'\\'
作为一个反斜杠。所以我尝试'\\\\'
作为两个反斜杠,它不起作用。我需要这个来实现我的程序。
答案 0 :(得分:2)
C中的一个字符只能是一个字符,因此你不能放入两个反斜杠。如果你解释了你想要的东西,我们可以更好地帮助你。
您可以通过执行以下操作使用strstr进行标记:
tok1 = str;
tok2 = strstr(str, "\\\\");
*tok2 = '\0';
tok2 += 2;
答案 1 :(得分:0)
我认为你感到困惑,并没有真正遇到你认为有的问题。当你看到反斜杠时,检查'n'并用'\ n'替换它,对吗?也就是说,'\'+'n' - > '\ n'。好吧,只需对反斜杠做同样的事情,但用它自己替换它:'\'+'\' - > '\'。
c = getchar();
if (c == '\\') /* escape */
{
c = getchar();
switch( c ):
{
case 'n':
c = '\n';
break;
case 't':
c = '\t';
break;
case '\\':
c = '\\'; /* not even necessary */
break;
...
}
}
/* store c in buffer */
通过省略不必要的赋值,您可以组合映射到自身的字符的处理:
switch( c ):
{
case 'n':
c = '\n';
break;
case 't':
c = '\t';
break;
case '\\': case '"': case '\'':
/* these escaped chars map to themselves so don't change c */
break;
/* ... handle other escapes such as \r, \<octal digits> too */
case EOF:
error("premature end of file in escape sequence"); /*write a function, error, that prints a message and a newline on stderr and calls exit(1) */
}
答案 2 :(得分:-1)
这是没有strtok的解决方案:
for(i=0, j=0, k=-1; i < strlen(str); i++){
if(str[i] == '\\') j++;
else j=0;
if(j == 2){
printf("%d %d\n", k + 1, i - 2);
k = i;
}
}
printf("%d %d\n", k + 1, i - 1);
它会给你索引,然后你就可以打印它或strncpy()
到另一个字符串。