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

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

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

問(wèn)題場(chǎng)景

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

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

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

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

1. isspace()函數(shù)

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

2. ungetc()函數(shù)

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

解決方案

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

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

使用示例:

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

運(yùn)行效果:

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

實(shí)現(xiàn)解析

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

注意事項(xiàng)

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

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

總結(jié)

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

相關(guān)文章

  • C++單例模式為何要實(shí)例化一個(gè)對(duì)象不全部使用static

    C++單例模式為何要實(shí)例化一個(gè)對(duì)象不全部使用static

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

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

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

    C++之Boost::array用法簡(jiǎn)介

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

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

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

    C語(yǔ)言制作掃雷游戲(圖形庫(kù))

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

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

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

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

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

    C++使用遞歸方法求n階勒讓德多項(xiàng)式完整實(shí)例

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

    解析使用C++編寫(xiě)無(wú)錯(cuò)代碼的方法技巧

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

    C語(yǔ)言簡(jiǎn)明講解單引號(hào)與雙引號(hào)的使用

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

最新評(píng)論

丹巴县| 玛曲县| 商河县| 九江市| 浦东新区| 武冈市| 环江| 乐业县| 朔州市| 丰原市| 利津县| 临泉县| 灵川县| 永年县| 漠河县| 米泉市| 平武县| 天门市| 天镇县| 平凉市| 霍林郭勒市| 桂平市| 毕节市| 祥云县| 凯里市| 龙岩市| 乐都县| 新津县| 淮南市| 杭锦旗| 磐安县| 菏泽市| 邢台县| 滕州市| 措勤县| 阳朔县| 崇左市| 叙永县| 富平县| 修武县| 海林市|