c語言程式設計
一.字串
1.字串的隨機字母賦值
a:65 a:97
(1).程式:
#include
#include
#include
int main()
(2).函式作用
a.rand():產生符合正太分布的整數
rand()%26(對26取餘,產生數字在0-25),伴隨記憶體清空隨機,每開關機一次便一次
b.srand():用於控制rand()隨機數產生的種子數,預設為1
c.time():產生系統編譯執行時刻的時間
『\0』=0,字串陣列遇0結束,『0』=48
2.字串函式
(1).字串長度統計函式
a.格式:strlen(首位址)
strlen與內容有關,sizeof與空間有關
b.作用:計算字串中結束符之前的有效字元個數
c.例:
char s[20];
gets(s);
printf("%d,%d",strlen(s),sizeof(s)); 5 , 20
d.注意
(a).strlen(s):字串結束符的下標
(b).strlen(s)-1:字串最後乙個有效字元的下標
(d).s[strlen(s)-1]:字串最後乙個有效字元的內容
三大區:靜態儲存區,唯讀屬性
記憶體堆疊區
程式**區
(2).字串拷貝函式
b.作用:將串2連同結束符一起從串1的0下標開始覆蓋
c.注意
(b).不允許疊加拷貝,如:
char s[20]=」china」;
strcpy(s,s+1);
(3).字串連線函式
b.作用:將串2連同結束符一起從串1的結束符位置開始覆蓋
(4).字串比較函式b.作用:按照ascii值大小比較2個串的大小,比較大小時「一戰定勝負」。
d.例:
char s[20]=「big」;
char t[20]=「small」;
if(strcmp(s,t)>0)
puts(s);
else
puts(t)
(5).字串逆置函式
b.作用:將字串進行倒置
3.字串例項
(1).字串統計
a.例1:統計字串中英文單詞個數
(b).
char s[40];
int i,t=0;
gets(s);
for(i=0;s[i];i++)
printf(「單詞個數=%d」,t);
b.例2:統計字串中大寫字母的個數,儲存在int b[26]中,且字母個數與陣列順序相同
char s[40];
int b[26]=;
int i;
gets(s);
for(i=0;s[i];i++)
if(s[i]>=『a』 && s[i]<=『z』)
b[s[i]-『a』]++;
for(i=0;i<26;i++)
printf("%d ",b[i]);
(2).字串改寫
a.例1:將字串ascii碼為奇數,下標為偶數的儲存到另乙個串中
char s[40],t[40];
int i,j=0;
gets(s);
for(i=0;s[i];i++)
if(s[i]%2= =1 & & i%2==0 )
t[j++]=s[i];
t[j]=0; /t串補上結束符/
puts(t);
b.例2:判斷回文字串
char s[40],t[40];
gets(s);
strcpy(t,s);
strrev(t);
if(strcmp(s,t)==0)
printf(「回文串」);
else
printf(「普通串」);
(3).字串刪除
a.例:abcd
e*****
b.刪除全部星號
c.刪除前導星號
d.刪除後導星號
e.使前導星號不得多於n個
f.使後導星號不得多於n個
//字串的隨機字母賦值
#include
#include
#include
intmain
(void)
s[10]=
0;puts
(s);
}// rand():產生符合正態分佈的整數
// srand():用於控制rand()隨機產生的種子數,預設為1
//time():產生系統編譯執行時刻的時間
//刪除字串中的x;
//第一種做法,遇見待刪字元,將後面字串整體賦值,如果不是,加加
#include
#define
n1000
#include
intmain
(void)}
else
}puts
(s);
}//第二種做法,遍歷迴圈,如果遇到不是待刪字元,將該字元賦給乙個指標,兩個加加,如果是,改下標繼續加加
#include
#define
n1000
#include
intmain
(void
)else
} s[j]=0
;puts
(s);
}//字串的統計(統計字串中英文單詞的個數)
#include
#include
intmain
(void
)//字串種當前字元不是空格,並且下乙個字元是空格或者結束符
}printf
("%d"
,t);
return0;
}//統計字串中大寫字母的個數,儲存在int b[26]中,且字母個數與陣列順序相同
#include
#include
intmain
(void);
char s[40]
;int t;
printf
("請輸入你所要判斷的字串");
gets
(s);
for(
int i=
0;s[i]
;i++)}
for(
int i=
0;i<
26;i++)}
判斷回文字串,可使用strrev逆置函式;**
***hhdkgh*
**ilv***
****
刪除全部星號,即使用上面字串的刪除兩種方法
刪除前導星號,定位第乙個非*字元,然後從第乙個非*字元從0下標錯位覆蓋
刪除後導星號,定位最後乙個有效字元,後導*中左起第乙個*補結束符
使前導*不得多於n個,首先計算前導*個數,計算保留*中第乙個*下標,進行覆蓋
使後導*不得多於n個,記錄個數,計算下標,補結束符
字串演算法KMP(字串匹配)板子及理解
下面是求next陣列的板子 void getnext char b 整個過程就相當於對自己和自己用kmp演算法,但是其中乙個自己要在另乙個自己前面乙個元素進行匹配。else k nx k 元素不相等k就回溯,由於j在k前面,所以此時nx k 是已經被算出來了的。下面是kmp演算法的板子 a是主串,b...
《演算法》 字串 字串排序
輸入字串和字串對應的組別 組別也是字串的鍵 在滿足組別有小到大排序的情況下,將字串按字母順序排序 第一步,記錄組別的頻率 為了得到某個字串在排序後的範圍,比如組別2肯定在組別1後面,在組別3前面,把每個組別有多少個人記錄下來,方便我們定位 第三步,分類 該組別的位置起點 向後挪一位 因為當前位被用了...
字串演算法 字串雜湊
方法以,m進製的形式來表示乙個字串,那麼這個字串就可以輕鬆計算 i j 之間的hash值 當只有小寫 大家字母時,m 131 而hash值,可以使用unsigned long long 來表示,這時不再需要求餘 方法應用 字串匹配。思路 對比hash值 允許k次失配的字串匹配 即 允許k次字元值不對...