C語言,利用指標編寫程式 刪除字串中的某字元

時間 2021-09-08 19:06:16

1樓:墨汁諾

p,q是指標,*p,*q表示p,q指向的地址儲存的字元。++是自增運算子,*q++=*p表示將當前p指向的地址儲存的值賦值給q指向的地址,賦值完成後q++,即q指向下一位地址。

如果還沒有理解的話可以用例項來分析一下,對於字串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',需要刪除,則不記錄

字串在儲存上類似字元陣列

它每一位單個元素都是能提取的,字串的零位是它的長度,如s[0]=10,這提供給我們很多方便,例如高精度運算時每一位都能轉化為數字存入陣列。

通常以串的整體作為操作物件,如:在串中查詢某個子串、求取一個子串、在串的某個位置上插入一個子串以及刪除一個子串等。兩個字串相等的充要條件是:

長度相等,並且各個對應位置上的字元都相等。

設p、q是兩個串,求q在p中首次出現的位置的運算叫做模式匹配。串的兩種最基本的儲存方式是順序儲存方式和連結儲存方式。

2樓:刺友互

1、其實頭函式每個都需要用到的就是#include ,因為程式裡面涉及到了輸出和輸入字串以及字元。#include 。

2、其次就是要定義兩個相同容量的字串儲存的變數 char a[100];  char b[100];。以及整數變數 int c;  int i=0,j=0; 其中a[100]是存字串的,b是存你刪除對應字元的字串的,整數c是你想刪除第幾位。j ,i 是後面for循壞中要使用到的變數。

3、 printf("請輸入你的字串");  scanf("%s",a);  printf("請輸入你想要刪除第幾位字元");  scanf("%d",&c)。

5、只要當i+1不等於c時把a【i】裡面的字元賦給b【i】,那麼這樣當i+1=c時不把它賦給b【i】從而實現刪除功能。

6、最後就給大家完整的看一下整體的一個**流程。

3樓:樂跑小子

#include

int main()

4樓:

#include

void fun(char *p,char ch)p++;}}

void main()

不知道你是不是這個意思?

c語言程式設計:在一個指定的 字串中刪除指定的 字元,並輸出該字串。

5樓:問明

#include

#include

int main(int argc, char **ar**)int num = 0;

for (int i = 0; i <= strlen(ar**[1]); i++)

if (ar**[1][i] != ar**[2][0])ar**[1][num] = (i == strlen(ar**[1])) ? '\0' : ar**[1][i];

num++;

printf("%s\n", ar**[1]);

return 0;

執行結果:

6樓:珈藍惜夢

源程式以及演算法註釋如下:#include

#include

int main()

;//定義刪除前的字串

char st[100] = ;//定義刪除後的字串q=st;//取出st字元陣列的首地址

p=str;//取出str字元陣列的首地址gets_s(str);//輸入字串

char a;//定義刪除字元變數

printf("請輸入要刪除的字元");

a = getchar();//輸入誰需要刪除的字元變數for(i=0;*(p+i)!='\0';i++)//迴圈遍歷,將非刪除字元的元素取出 }

printf("%s", st);//輸出刪除後字串return  0;

輸出結果如下:擴充套件資料:其他實現方法:

#include

#include

int main()

int j=0,i;

char str[20],c;

gets(str);

scanf("%c",&c);

for(i=0; str[i]!='\0'; i++)if(str[i]!=c)

str[j++]=str[i];

str[j]='\0';

printf("%s\n",str);

return 0;}

7樓:

宣告一個字元陣列str存入輸入的字串,再宣告一個字元變數接收要刪除的字元。分別用i和j源字元陣列計數和目標字元陣列計數,然後開始對str進行自己向自己連同最後的'\0'逐字元複製;當遇到要刪除的字元時目標計數j暫停一次計數,這樣要刪除的字元就會被下一個非刪除字元覆蓋。最後就達到了刪除指定字元的目的。

//#include "stdafx.h"//if the vc++6.0, with this line.

#include "stdio.h"

int main(void)

8樓:手機使用者

用for迴圈中的continue功能吧,當遇到指定字元是直接跳過進入下一個迴圈,具體的我想你應該會寫吧,因為我手機寫程式設計的話比較麻煩,所以就不寫了…如果有其他人寫了的話樓主就把分給他吧…

9樓:灰姑娘的霸氣

#include #include char* delcharfromstring(char *str, int len, int pos); void main() char* delcharfromstring(char *str, int len, int pos) for(i=0; i= pos) tmp++; } *tmp = '\0'; return str;}

10樓:匿名使用者

樣例輸入

sdf$$$sdf$$

$樣例輸出

sdfsdf

是要這種效果吧

附上**

#include

int main()

}printf("\n");

return 0;}

c語言,利用指標編寫程式:刪除一個字串中的某一個字元

11樓:匿名使用者

你好!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」

12樓:智者總要千慮

#includeint main()

c語言編寫程式,c語言程式編寫

c語言的教材上好象有這個題,現在沒有時間編寫,著急要嗎?第二個應該越簡單越好。include void main printf 3d,3d,3d max maxi maxj printf 3d,3d,3d min mini minj 進行逐項比較。第一題 include main elsebreak...

c語言編寫程式利用rand函式產生100以內的隨

小夏在深圳 源 如下 srand include main int i,j for i 0 i 100 i j 1 int 10.0 rand rand max 1.0 printf d j 擴充套件資料 1 rand 的內部實現是用線性同餘法做的,它不是真的隨機數,因其週期特別長,故在一定的範圍裡...

c語言編寫程式題求大神,C語言編寫程式題,求大神

菊隱逸者也 最簡單明瞭的程式如下 include main double x,y,max,min min max 0 for x 0 x 2 x 0.2 y 2 x x x 3 x x x x 6 x x x x x 4 x 50 printf 當x f時,y f n x,y if y max ma...