2015-02-08 2 views
0

Недавно я услышал, как мой профессор говорил о возможности сделать что-то подобное. Я не могу найти ни одного метода, который звучит так, как если бы он это сделал. Так что мой вопрос стоит. В стандартном цикле getchar while, как бы заглянуть в следующий символ. В этом цикле я передаю некоторые массивы и получаю символы переключателя цикла из массива s 'chars в массивы news' chars для строки, которая помещается через командную строку.getchar()! = EOF Loop peeking at next char

В любом случае код делает то, что он предназначен для большинства случаев, за исключением того, что он также должен учитывать символы «/ t» и т. Д. Как один символ, а не два. Я думал о проверке, если (c == '\'), а затем проверяет, будет ли следующий символ ar, t, n и т. Д.

TL: вопрос о том, как заставить этот цикл найти escape-последовательности символов и рассматривать их как один символ вместо двух? Большое спасибо.

void tr_str(char s[], char news[]){ 
int c; 
size_t k =0; 
    while ((c = getchar()) != EOF) 
    { 
     for(k=0; k < strlen(s);k++) 
     {     
      if(c == s[k]) 
      { 
       c = news[k]; 
      } 
     } 
     putchar(c); 
    } 
} 

ответ

1

Вы подглядывать в следующем полукокса, прочитав его, а затем вызвать ungetc().

int c; 
while ((c = getchar()) != EOF) { 
    if (c == 'x') { 
     ungetc(c, stdin); 
     break; 
    } 
    ... 
} 

Однако, когда вы обрабатываете управляющие последовательности, вам просто нужно getchar() дважды.

while ((c = getchar()) != EOF) { 
    if (c == '\\') { 
     c = getchar(); 
     switch (c) { 
     case EOF: ... 
     case 'n': ... 
     case 't': ... 
     } 
    } 
    ... 
} 
+0

Awesome. Есть ли способ объединить это с тем, что у меня есть? В настоящее время программа делает немного, но в большинстве случаев нет escape-символов. обычно пользователь вводит (a, b, d, e), затем (w, x, y, z), затем строку программа заменит первую последовательность второй последовательностью banana = xwnwnw Проблемы возникают при входе пользователей (\, n, \, \, \, b) (x, y, z), а затем говорят: \ n '' \\ '' \ b ' – TheUnknown

+0

Похоже, вы сами решаете это , поэтому я не знаю, что сказать здесь. –