c - getchar() != EOF 循环查看下一个字符

标签 c arrays string eof

我最近无意中听到我的教授谈论能够做这样的事情。我找不到一个听起来可以做到这一点的方法。所以我的问题成立。在标准 getchar while 循环中,如何查看下一个字符。在此循环中,我传入一些数组,并让循环将通过命令行输入的字符串的字符从数组 s' 字符切换到数组新闻' 字符。

无论如何,代码在大多数情况下都会执行其预期的操作,除了它还必须将“/t”等字符视为单个字符而不是两个字符。我正在考虑检查 if(c == '\') 然后检查下一个字符是否是 r、t、n 等。

TL:DR 问题是如何让这个循环找到转义序列字符并将它们视为一个字符而不是两个字符?非常感谢。

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);
    }
}

最佳答案

您可以通过读取下一个字符来查看它,然后调用 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': ...
        }
    }
    ...
}

关于c - getchar() != EOF 循环查看下一个字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28390646/

相关文章:

检查正在使用的端口

javascript - 将列表转换为数组

javascript - JSON、数组和对象的调用

java - Android检测给定字符串中的空间并换行

c++ - 更新进程地址空间中的 HTML 内容

java - Java Interposer 中的堆栈粉碎

c - Printf 没有显示第一个,只显示后面的

javascript - Javascript 中的数组和对象复制

javascript - 在日期之前分割字符串 (d/m/Y)

java - 用 Java 将字符串写入文件并读取它们