1樓:匿名使用者
你好!p,q是指標,*p,*q表示p,q指向的地址儲存的字元
根據程式來說:
for(p = s, q = s; *p! = '\0'; p++)
if(*p != del_x)
*q++ = *p;
*q = *p;
puts(s);
首先,p作為迴圈下標,從s字串的第一位到最後一位判斷是否為刪除的字元
其次,q作為新字串s的下標,對於每一位非刪除字元,儲存下來,q下標+1等待下一個字元
最後,退出迴圈時p指向的是空字元,q還在等待新字元,這時將*p賦給*q表示新字串結束,然後puts輸出
如果還沒有理解的話可以用例項來分析一下,對於字串 s =「abcabc」,刪除字元『a』,簡單設s起始位置為0,則s[0]='a',s[1]='b',s[2]='c',s[3]='a',s[4]='b',s[5]='c',s[6]='\0'
迴圈開始時,p = 0,q = 0,到*p='\0',即p=6時結束,p每次+1
p = 0,q = 0,此時*p=s[0]='a',需要刪除,則不記錄
p = 1,q = 0,此時*p=s[1]='b',不需刪除,記錄*q即s[0] = 'b',q = q+1
p = 2,q = 1,此時*p=s[2]='c',不需刪除,記錄*q即s[1] = 'c',q = q+1
p = 3,q = 2,此時*p=s[3]='a',需要刪除,則不記錄
p = 4,q = 2,此時*p=s[4]='b',不需刪除,記錄*q即s[2] = 'c',q = q+1
p = 5,q = 3,此時*p=s[5]='c',不需刪除,記錄*q即s[3] = 'c',q = q+1
p = 6,q = 4,此時*p=s[6]='\0',退出迴圈
此時*q = *p,即s[4] = '\0' 表示字串結束,最後新字串s = 「bcbc」
2樓:智者總要千慮
#includeint main()
用C語言編寫程式,用C語言編寫一個程式
樓上沒有找出相差最小的數而是找出的和平均數比較結果中最小的數 include include void main int v,b 10 int i v a 0 a 1 a 2 a 3 a 4 a 5 a 6 a 7 a 8 a 9 10 for i 0 i 10 i for i 0 i 9 i if...
c語言請編寫程式來幫,c語言 請編寫一個程式來幫
right prompt wrong prompt 求幫忙編一個c語言程式 本來想著給你答一下。結果發現太遲了,只是編寫了一些 你看一下。如果能用就用。還沒編譯過。一定有很多問題吧。一般 只是參考一下。或可這麼做。include define maxsize 1024 int store maxsi...
C語言程式設計,編寫程式,求10 用C語言
第0題 include define maxlen 70 main int i,temp,flag 0 printf 請輸入第一個字串 n scanf s s1 printf 請輸入第二個字串 n scanf s s2 i strlen s1 temp strlen s2 if i main x i...