1、可以寫一個函數(shù)接受一個字符串和一個字符,如果此字符出現(xiàn)在字符串中,就將串中的字符刪除,要求刪除該字符后,后續(xù)的字符向前移,以填充該空位。
創(chuàng)新互聯(lián)成立于2013年,先為烏海等服務(wù)建站,烏海等地企業(yè),進行企業(yè)商務(wù)咨詢服務(wù)。為烏海企業(yè)網(wǎng)站制作PC+手機+微官網(wǎng)三網(wǎng)同步一站式服務(wù)解決您的所有建站問題。
2、例程:
#includestdio.h
#includestring.h
#define?MAX?80
void?Delete(char?str[],char?c)
{
int?i;
int?l=strlen(str);
for(i=0;il;i++)
{
if(str[i]?==?c)
{
int?j;
for(j=i;jl;j++)
str[j]=str[j+1];
break;
}
}
}
int?main()
{
char?str[MAX],c;
printf("輸入一個字符串:");
gets(str);
printf("輸入一個字符:");
c=getchar();
Delete(str,c);
puts(str);
return?0;
}
scanf將接收到的回車扔回到緩沖區(qū),gets將接收到的回車符號轉(zhuǎn)變?yōu)閈0存入str,使用gets不檢查字符串是否超出大小,存在安全問題,建議用fgets
#include stdio.h
#include string.h
int main(void){
char str1[10]="aaaaaaaaa",str2[10]="bbbbbbbbb";
scanf("%s",str1);
// getchar();
gets(str2);
return 0;
}
這里面的getchar()就是為了接收扔回到緩沖區(qū)的回車,否則,str2只能接收到一個回車符。
5 scanf("%s",str1);
(gdb) s
abcdef
(gdb) p str1
$1 = "abcdef\000aa"
(gdb) p str2
$2 = "\000bbbbbbbb"
getchar函數(shù)每次只從緩沖區(qū)中接受一個字符。
getchar有一個int型的返回值。
當程序調(diào)用getchar時,程序就等著用戶按鍵,用戶輸入的字符被存放在鍵盤緩沖區(qū)中,直到用戶按回車為止(回車字符也放在緩沖區(qū)中)。當用戶鍵入回車之后,getchar才開始從stdin流中每次讀入一個字符,getchar函數(shù)的返回值是用戶輸入的第一個字符的ASCⅡ碼,如出錯返回-1,且將用戶輸入的字符回顯到屏幕。
如用戶在按回車之前輸入了不止一個字符,其他字符會保留在鍵盤緩存區(qū)中,等待后續(xù)getchar調(diào)用讀取。也就是說,后續(xù)的getchar調(diào)用不會等待用戶按鍵,而直接讀取緩沖區(qū)中的字符,直到緩沖區(qū)中的字符讀完為后,才等待用戶按鍵。
舉例如下:
char?ch;
ch?=?getchar();???//?接收用戶輸入的第一個字符,并賦值給字符變量ch??返回值為輸入第一個字符的ASCII碼
gets,scanf都會在末尾加上\0的,要不然字符串就沒法結(jié)束了;
他們的不同在于,scanf碰到緩沖區(qū)里面的空字符(空格,tab,回車,換行就會截斷并添加\0),而gets是要等回車才截斷字符串并添加\0的;
比如用輸入字符串:abcdefg hijk回車;
用scanf的話,會得到abcdefg,而gets則是:abcdefg hijk。
C語言是一門通用計算機編程語言,應(yīng)用廣泛。C語言的設(shè)計目標是提供一種能以簡易的方式編譯、處理低級存儲器、產(chǎn)生少量的機器碼以及不需要任何運行環(huán)境支持便能運行的編程語言。
盡管C語言提供了許多低級處理的功能,但仍然保持著良好跨平臺的特性,以一個標準規(guī)格寫出的C語言程序可在許多電腦平臺上進行編譯,甚至包含一些嵌入式處理器(單片機或稱MCU)以及超級電腦等作業(yè)平臺。
二十世紀八十年代,為了避免各開發(fā)廠商用的C語言語法產(chǎn)生差異,由美國國家標準局為C語言制定了一套完整的美國國家標準語法,稱為ANSI C,作為C語言最初的標準。目前2011年12月8日,國際標準化組織(ISO)和國際電工委員會(IEC)發(fā)布的C11標準是C語言的第三個官方標準,也是C語言的最新標準,該標準更好的支持了漢字函數(shù)名和漢字標識符,一定程度上實現(xiàn)了漢字編程。