關於C語言的字符串的學習研究與實驗

本文分享了作者在学习C语言过程中,针对字符串输入输出函数的学习心得与实践成果。通过自定义读写函数,不仅解决了从Pascal语言转换的问题,还深入理解了C语言中指针、数组及字符串的关系。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

以前學習C語言的時候并沒有太多的關注字符串方面的事情,導致後來我想把pascal寫的EXKMP代碼翻譯成C語言的時候,我發現我竟然不會用C語言的字符串輸入輸出函數,於是我萌生了自己寫兩個函數來輸入輸出,靈感來源於《C語言程序設計》這本書,這本書上給出了兩個自定義的字符串處理函數,但是它們并不能滿足我的要求,於是我自己學習研究了一下C語言的數組,指針和字符串之間的關係,成功把我要的函數寫出來了,以後就以此為模板了!好了,下面進入正題:不多說,先上代碼:

輸入函數:

int read(char *s){

         intx = 0;

         while((*s++=getchar())!=10) x++;

         *s= 0;

         return x;

}

我將兩個函數都定義成返回值為整型的函數,輸入函數返回一個數值為輸入的字符串的長度!輸入函數傳入一個地址,為要讀取的字符串的首地址,關於主語句while((*s++=getchar())!=’\n’) x++;這是我根據最近所學的運算符的優先級而寫出來,已經是我能寫出來的最簡潔的表達式了,但是個人感覺還是不夠簡潔,要是能把getchar()外面的括號去掉就好了,希望以後能更加簡潔的寫這個句子!這個讀取函數以換行符為結束標誌,只要讀取到換行符,則停止讀入,并將換行符換成0,因為在C語言中,字符串的最後有一個0字符以表示字符串的結束。當然以換行符為結束標誌其實是有bug的,因為在文件讀取的時候可能會在還沒碰到換行符時文件就結束了,這樣可能造成程序崩潰,但是如果是從鍵盤標準輸入的話就不會有這個問題,還有就是因為一般的編輯工具都會自動在文件末尾添加一個換行符,所以如果有特殊要求的話再改動吧,這樣子可以應付大部分情況了!

然後是輸出函數:

int write(char *s){

         intx = 0;

         while(*s) putchar(*s++),x++;

         return x-1;

}

同樣的,輸出函數也會返回所輸出的字符串的長度,當然如果不需要的話,你也可以將其做成viod型,不過一個int所占的內存幾乎可以忽略,無所謂了。其實輸出函數比輸入函數要好寫一些,但是呢,輸出函數容易出錯,例如我就這樣寫過:while(s)…;然後就苦逼的死循環了!這是基礎問題,指針方面的問題。但是字符串,數組在C語言裡面是和指針有著無法分割的聯繫的,所以指針要學好,畢竟C語言的最大的兩個亮點就是指針和動態內存分配了。看的好多書本里都說指針是C的靈魂,所以指針還是要好好學的。

有了這兩個函數,終於可以放開手腳的去翻譯PASCAL代碼了!!還有就是從發現這個問題到解決這個問題,一共過去了兩周的時間,調試代碼的時間加起來大概是四個小時,也就是兩節C程的上機課的時間。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值