最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

C語言之如何用isspace()和ungetc()實現(xiàn)前導(dǎo)空白字符過濾

 更新時間:2025年04月10日 15:49:19   作者:牧木江  
這篇文章主要介紹了C語言如何用isspace()和ungetc()實現(xiàn)前導(dǎo)空白字符過濾問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教

問題場景

當(dāng)使用getchar()進(jìn)行字符輸入時,我們經(jīng)常需要跳過輸入流開頭位置的空格、制表符、換行符等空白字符,直到遇到第一個有效字符為止。這在處理用戶輸入或解析文件時尤為常見。

對于初學(xué)者來說,在做算法練習(xí)的時候也會遇到如先為int類型的變量輸入一個值,后再輸入一個字符串的情況。此時由于不知道兩次輸入之間的空白字符的數(shù)量以及類型,處理前導(dǎo)的空字符便成了一個稍麻煩的問題。

洛谷許多題目進(jìn)行不同行輸入時通常采用的是"\r\n"而不是單純的"\n",樓主曾經(jīng)就嘗試使用游離的getchar()處理兩次輸入之間的’\n’,結(jié)果一道橙題折騰了一晚上也沒AC…

關(guān)鍵函數(shù)說明

1. isspace()函數(shù)

#include <ctype.h>
int isspace(int c);
  • 判斷傳入的字符是否是空白字符
  • 支持的空白字符包括:空格(’ ‘)、換頁符(’\f’)、換行符(‘\n’)、回車符(‘\r’)、水平制表符(‘\t’)、垂直制表符(‘\v’)

2. ungetc()函數(shù)

#include <stdio.h>
int ungetc(int c, FILE *stream);
  • 將指定字符推回輸入流
  • 常用于"偷看"下一個字符后需要還原的場景
  • 最多保證1個字符的可靠回推

解決方案

#include <stdio.h>
#include <ctype.h>

void trim_leading_whitespace() {
    int c;
    // 跳過所有空白字符,注意這里while后面的分號
    while ((c = getchar()) != EOF && isspace(c));
    if (c != EOF) {
    	ungetc(c, stdin); // 將第一個非空白字符放回緩沖區(qū)
    }
}

使用示例:

int main() {
    printf("請輸入帶空格的字符串:");
    
    trim_leading_whitespace();
    
    int ch;
    printf("處理后的首字符:");
    if ((ch = getchar()) != EOF) {
        putchar(ch);
    }
    
    // 讀取剩余字符
    printf("\n剩余字符:");
    while ((ch = getchar()) != '\n' && ch != EOF) {
        putchar(ch);
    }
    
    return 0;
}

運行效果:

請輸入帶空格的字符串:     Hello World
處理后的首字符:H
剩余字符:ello World

實現(xiàn)解析

  1. 循環(huán)讀取:通過while循環(huán)持續(xù)讀取字符,直到遇到EOF或非空白字符
  2. 字符判斷:使用isspace()過濾所有類型的空白字符
  3. 字符回推:檢測到第一個非空白字符后,使用ungetc()將其放回輸入緩沖區(qū)
  4. 后續(xù)處理:主程序可以正常讀取到過濾后的第一個有效字符

注意事項

  1. 回推限制:ANSI C保證至少1個字符的可靠回推,多個字符的回推行為取決于具體實現(xiàn)
  2. 流類型:適用于所有標(biāo)準(zhǔn)輸入流(stdin)及文件流
  3. 錯誤處理:需考慮EOF的邊界條件
  4. 編碼兼容:完美處理ASCII編碼,對寬字符需要改用iswspace()

通過這種組合使用,我們可以優(yōu)雅地實現(xiàn)輸入流的預(yù)處理,為后續(xù)的字符處理打下良好基礎(chǔ)。

總結(jié)

以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • C++單例模式為何要實例化一個對象不全部使用static

    C++單例模式為何要實例化一個對象不全部使用static

    這篇文章主要介紹了C++單例模式為何要實例化一個對象不全部使用static,文基于C++圍繞主題展開詳細(xì)內(nèi)容,需要的小伙伴可以參考一下
    2022-05-05
  • Qt可視化大屏布局的實現(xiàn)

    Qt可視化大屏布局的實現(xiàn)

    數(shù)據(jù)可視化大屏在項目中的使用很常見,本文主要介紹了Qt可視化大屏布局的實現(xiàn),具有一定的參考價值,感興趣的可以了解一下
    2024-02-02
  • C++之Boost::array用法簡介

    C++之Boost::array用法簡介

    這篇文章主要介紹了C++之Boost::array用法簡介,較為詳細(xì)的分析了Boost::array中的常見用法,并用實例的形式予以總結(jié)歸納,需要的朋友可以參考下
    2014-10-10
  • C++虛函數(shù)表深入研究

    C++虛函數(shù)表深入研究

    這篇文章主要介紹了C++的虛函數(shù)表,內(nèi)容非常詳細(xì),思路清晰,需要的朋友可以參考下,希望能夠給你帶來幫助
    2021-10-10
  • C語言制作掃雷游戲(圖形庫)

    C語言制作掃雷游戲(圖形庫)

    這篇文章主要為大家詳細(xì)介紹了C語言制作掃雷游戲,結(jié)合圖形庫,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-06-06
  • C語言魔方陣的三種實現(xiàn)方法

    C語言魔方陣的三種實現(xiàn)方法

    大家好,本篇文章主要講的是C語言魔方陣的三種實現(xiàn)方法,感興趣的同學(xué)趕快來看一看吧,對你有幫助的話記得收藏一下,方便下次瀏覽
    2021-12-12
  • C++中的操作符重載詳細(xì)解析

    C++中的操作符重載詳細(xì)解析

    運算符重載后不能改變運算符的操作對象(操作數(shù))的個數(shù);如:"+"是實現(xiàn)兩個操作數(shù)的運算符,重載后仍然為雙目運算符
    2013-09-09
  • C++使用遞歸方法求n階勒讓德多項式完整實例

    C++使用遞歸方法求n階勒讓德多項式完整實例

    這篇文章主要介紹了C++使用遞歸方法求n階勒讓德多項式,涉及C++遞歸算法與浮點數(shù)運算的相關(guān)技巧,具有一定參考借鑒價值,需要的朋友可以參考下
    2016-05-05
  • 解析使用C++編寫無錯代碼的方法技巧

    解析使用C++編寫無錯代碼的方法技巧

    本篇文章是對使用C++編寫無錯代碼的方法進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下
    2013-05-05
  • C語言簡明講解單引號與雙引號的使用

    C語言簡明講解單引號與雙引號的使用

    這篇文章主要介紹了在C語言里單引號和雙引號的使用,本文通過實例代碼說明了單引號和雙引號的概念與各自的用法,以下就是詳細(xì)內(nèi)容,需要的朋友可以參考下
    2022-04-04

最新評論

长兴县| 吴堡县| 鞍山市| 民县| 邛崃市| 淳安县| 开化县| 遂平县| 广丰县| 通海县| 玛多县| 洞口县| 德保县| 四会市| 博客| 烟台市| 万盛区| 武安市| 禹州市| 泸西县| 灵台县| 仪陇县| 敖汉旗| 惠州市| 五华县| 尚义县| 黎城县| 安丘市| 元谋县| 嘉定区| 庄浪县| 金沙县| 县级市| 竹北市| 泾源县| 绥宁县| 鸡东县| 芦山县| 湘潭市| 庆阳市| 华阴市|