日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 >

数据结构串之寻找整数

發布時間:2024/1/8 39 豆豆
生活随笔 收集整理的這篇文章主要介紹了 数据结构串之寻找整数 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

輸入一個字符串,內有數字和非數字字符,如:ak123x456 17960?302gef4563,將其中連續的數字作為一個整體,依次存放到一數組a中,例如123放入a[0],456放入a[[1]],… … 。編程統計共有多少個整數,并輸出這些數。

*我是在數據結構串那一章的習題里面遇到的此題,所以覺得應該用串相關的知識和形式解決,我在網上看過幾篇解決此題的方法,但是都沒有涉及串的知識。心血來潮,在下面我寫了自己理解的代碼,可能有多余的地方,希望大家指正,提提建議。 *

#include "stdio.h" #include "stdlib.h" typedef struct hstring {char *ch;//指針域int length;//長度計數 }String; bool strAssign(String &s,char *c)//給字符串賦值 {if(s.ch)//如果不是空字符串,則將其置空,即清空原字符串s.ch = NULL;int i = 0;while(c[i])//遍歷字符數組,得到長度{i++;}s.length = i;if(i>0)如果長度大于0,說明字符串不為空{if(!(s.ch =(char*)malloc(i*sizeof(char)))) //分配一個String空間return false; //分配失敗,則返回falsefor(int j=0;j<i;j++) //否則分配成功,給字符串賦值s.ch[j] = c[j];}return true; //一切正常的話,最后返回成功 } bool strAssign_S(String &s,String str)//兩個String字符串互相賦值 {if(s.ch)//如果不是空字符串,則將其置空,即清空原字符串s.ch = NULL;s.length = str.length;//把目標Sring str的長度賦值給要操作的String sif(str.length>0)//如果大于0,說明目標String str不為空串{if(!(s.ch =(char*)malloc(str.length*sizeof(char))))//如果申請空間不成功,返回falsereturn false;for(int j=0;j<str.length;j++)//遍歷目標Sring str賦值給要操作的String ss.ch[j] = str.ch[j];}return true;//一切正常的話,最終返回true } bool strSub(String &sub,String s,int pos,int len)//剪切字符串 {if(pos<0||pos>s.length - 1||len<0||len>s.length-pos)//剪切位置不合理,返回falsereturn false;if(sub.ch)//如果不是空字符串,則將其置空,即清空原字符串sub.ch = NULL;if(len==0)//如果所要剪切的長度為0,那么sub字符串就是空串{sub.ch = NULL;sub.length = 0;}else//正常情況{sub.ch = (char *)malloc(sizeof(char)*len);//申請長度為len的String串空間for(int i= 0;i<len;i++)遍歷,將要剪切的字符串賦值給新字符串sub{sub.ch[i] = s.ch[pos+i];}sub.length = len;}return true;//一切正常的話,返回true } int str_num(String s)//一次剪切一個數,返回第一組數字字符串結束時的長度 {int i = 0,flag=0;//i用來標記s的位置,同時統計第一組數字的長度,flag用來標記連續的數字串while(i<s.length){if('0'<=s.ch[i]&&s.ch[i]<='9')//字符串是數字,繼續遍歷{flag++;}else {if(flag>0)//字符串不是數字,停止遍歷break;}i++;}return i; } void show(String &s)//顯示String字符串 {int i=0;while(i<s.length){printf("%c",s.ch[i]);i++;}printf("\n"); } String get_firstnumstr(String s)//返回首個數字字符串 {int i = 0,k = 0,flag=0,pos=0;String r;//用來保存首個數字字符串while(i<s.length)//遍歷{if('0'<=s.ch[i]&&s.ch[i]<='9')//連續的數字遍歷{if(flag==0)//用pos記錄剪切的起始位置pos = i;flag++;//用flag記錄剪切的長度}else //出現非數字字符{if(flag>0)/同時flag已經大于零,說明出現非數字字符之前有數字了break;}i++;}strSub(r,s,pos,flag);//將首個數字字符串剪切下來,使得原字符串縮短return r; } int strlen(String s)//返回String字符串長度 {return s.length; } int main() {char str[80] = "ak123x456 17960?302gef4563"; String a[20];//把數字字符串保存在a數組 String b[20];//用于保存剪切后的字符串 String strs; //原字符串 int i =0;bool sub_flag=true;//是否還能剪切標志位 strAssign(strs,str);//賦初值 printf("原字符串是:");show(strs);strSub(b[0],strs,0,strlen(strs));//把完整的字符串先給b[0]保存 while(sub_flag){strAssign_S(a[i],get_firstnumstr(b[i]));//把第一個數字字符串給數組a保存 i++;sub_flag=strSub(b[i],b[i-1],(int)str_num(b[i-1]),(int)(strlen(b[i-1])-str_num(b[i-1])));}printf("該字符串有%d個數字,分別如下:\n",i);for(int k=0;k<i;k++)show(a[k]); return 0; }

運行結果如下:上述程序的執行結果如下,你可以任意改變原字符串,經過測試,均符合要求。

總結

以上是生活随笔為你收集整理的数据结构串之寻找整数的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。