if (ch == '\\')
{
escape_ch = '\\\\';
}
编译器对 4 个反斜杠不满意,但我需要能够'\\'
作为一个字符。C 读'\\'
作一个反斜杠。所以我尝试'\\\\'
了两个反斜杠,但它不起作用。我需要这个来实现我的程序。
if (ch == '\\')
{
escape_ch = '\\\\';
}
编译器对 4 个反斜杠不满意,但我需要能够'\\'
作为一个字符。C 读'\\'
作一个反斜杠。所以我尝试'\\\\'
了两个反斜杠,但它不起作用。我需要这个来实现我的程序。
C 中的一个字符只能是一个字符,因此您不能输入两个反斜杠。如果您解释您想要什么,我们可能会更好地帮助您。
您可以通过执行以下操作使用 strstr 进行标记化:
tok1 = str;
tok2 = strstr(str, "\\\\");
*tok2 = '\0';
tok2 += 2;
我认为您感到困惑,并且实际上并没有您认为的问题。当你看到一个反斜杠时,你检查'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) */
}
这是没有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()
到另一个字符串。