字符串處理函數(shù)
為大理州等地區(qū)用戶提供了全套網(wǎng)頁設計制作服務,及大理州網(wǎng)站建設行業(yè)解決方案。主營業(yè)務為網(wǎng)站建設、網(wǎng)站設計、大理州網(wǎng)站設計,以傳統(tǒng)方式定制建設網(wǎng)站,并提供域名空間備案等一條龍服務,秉承以專業(yè)、用心的態(tài)度為用戶提供真誠的服務。我們深信只要達到每一位用戶的要求,就會得到認可,從而選擇與我們長期合作。這樣,我們也可以走得更遠!其實c語言中提供了字符串處理的相應函數(shù),我們直接調(diào)用即可
求字符串長度 strlen //string length
字符串copy strcpy //string copy
字符串連接 strcat
字符串比較 strcmp //string compare
例:
#include
#include
int main()
{
chara[] = "hello";
printf("lenis %d\n", strlen(a)); //打印字符串長度 (strlen(a) 可以求字符串長度)
charb[100] = { 0 };
strcpy(b, a); //strcpy 能將a copy 給 b
char c[100] ="world";
printf("bis %s\n", b); //????? Hello
strcat(b, c); //strcat 能將c連接到b后面 (字符串連接)
printf("bis %s\n", b); //b ????? helloworld
}
strcmp 比較字符串時,strcmp(s1,s2),
如果s1 >s2返回1,s1< s2 返回-1,s1 =s2返回0
"abcd">"abc"
"abcd"< "bc" //字符串比較先比第一個字母, 'a'< 'b' 那么 "abcd"< "bc"
"abcd">"ABCD" //'a'(97) >'A'(65)
"abcd">"1234" //'a'(97) >'1'(49)
例:
#include
#include
int main()
{
inta = strcmp("abcd", "abc");
printf("abcdabc %d\n", a);
printf("abcdbc %d\n", strcmp("abcd", "bc"));
printf("abcdABCD %d\n", strcmp("abcd", "ABCD"));
printf("abcdabcd %d\n", strcmp("abcd", "abcd"));
}
練習3
將字符串char a[] = "Hello World!"中的小寫字母轉(zhuǎn)大寫
#include
int main()
{
chara[] = "Hello World!";
inti = 0;
while(a[i]!= '\0')
{
if(a[i]>= 'a' && a[i]<= 'z')
{
a[i]= a[i] - 32;
}
i++;
}
printf("%s\n",a);
}
一維數(shù)組
int a[5];
int a[5] = {1,2,3,4,5}; //定義數(shù)組同時初始化
char b[5];
float c[5];
sizeof(a) ? 20 (每個是int 5個)
sizeof(b) ? 5
sizeof(c) ? 20
for(i = 0; i< 5; i++)
{
a[i]= i;
}
字符串
"hello"------>sizeof("hello") ? 6
char s[] = "hello"; //用字符數(shù)組存字符串
printf("%s\n", s); //%s 表示輸出一個字符串
scanf("%s", s); //輸入的時候不要寫
3 作業(yè)講解
練習
1. 圍繞著山頂有10個圓形排列的洞,狐貍要吃兔子,
兔子說:“可以,但必須先找到我,我就藏身于這十個洞中的某個洞。
你從1號洞找,下次隔1個洞(即3號洞)找,第三次隔2個洞(即6號洞)找,
再隔3個…以后在這個圓圈中如此類推,次數(shù)不限?!钡倧脑绲酵磉M進出出了1000次,仍沒有找到兔子。
問:兔子可能在哪個洞里?
思路: 定義一個有10個元素的數(shù)組,初始值全是0,狐貍進某個洞(可以通過計算數(shù)組下標),進入一個值為1
1000之后,可能有n個洞被進入,n個1
從第一個洞開始,檢索是否還為0,是0的,輸出
#include
int main()
{
inta[10] = { 0 };
inti, j = 0; //i 是隔的洞數(shù),j是進入的洞號(從0開始)
for(i= 1; i<= 1000; i++)
{
a[j]= 1;
j= j + i + 1; //隔i個洞,最后j是洞號
j= j % 10;
}
for(i= 0; i< 10; i++)
{
if(a[i]== 0)
printf("%d\n",i + 1);
}
}
/*
//1. 消除一句話中所有的原音字母,例如
//I am a student!
// 輸出: m stdnt!
#include
#include
int main()
{
chars[] = "I am aaa student";
inti, j;
intlen = strlen(s); //先求出字符串長度,為了后面移動用
for(i= 0; i< len; i++)
{
if(s[i]== 'A' || s[i] == 'a' || s[i] == 'E' || s[i] == 'e'
||s[i] == 'I' || s[i] == 'i' || s[i] == 'O' || s[i] == 'o'
||s[i] == 'U' || s[i] == 'u')
{
for(j= i; j< len; j++) //后面的都往前移
{
s[j]= s[j + 1];
}
i--; //為了避免出現(xiàn)連續(xù)的元音字母
}
}
printf("%s\n",s);
}
二維數(shù)組(存儲矩陣)
如果存儲 (這些數(shù)有3行 4列)
1 2 3 4
5 6 7 8
9 1011 12
如果存儲,有行,有列的數(shù),就用二維數(shù)組
int a[3][4]; //3 行 4 列
同時也可以
int a[3][4] = {{1,2,3,4}, {5,6,7,8},{9,10,11,12}}; //也可以int a[3][4] ={1,2,3,4,5,6,7,8, 9,10,11,12}};
a[0][0] 第一行第一列
a[0][1] 第一行第二列
a[1][1] 第二行第二列
a[2][3] 第三行第四列
a[3][4] 第四行第五列 (不存在)
//數(shù)組用2重for 循環(huán)賦值
例: 如何輸出二維數(shù)組所有元素
#include
int main()
{
inti, j;
inta[3][4] = {{1,2,3,4}, {5,6,7,8},{9,10,11,12}};
for(i= 0; i< 3; i++)
{
for(j= 0; j< 4; j++)
{
printf("%5d",a[i][j]);
}
printf("\n");
}
}
練習
1. 查詢一個二維數(shù)組當中是否存在某個數(shù),如果存在計算有多少個這樣的數(shù)
int a[3][4] = {{1,2,3,4},{5,3,7,8},{9,10,11,12}};
3---->2
5---->1
6---->0
#include
int main()
{
inti, j, x, n = 0;
inta[3][4] = {{1,2,3,4}, {5,3,7,8},{9,10,11,12}};
scanf("%d",&x);
for(i= 0; i< 3; i++)
{
for(j= 0; j< 4; j++)
{
if(a[i][j]== x)
{
n++;
}
}
}
printf("nis %d\n", n);
}
2. 求兩個矩陣之和放在第三個矩陣中(3行4列)
inta[3][4] = {{1,2,3,4},{5,6,7,8},{9,10,11,12}};
intb[3][4] = {{1,1,1,1},{2,2,2,2},{3,3,3,3}};
#include
int main()
{
inti, j;
inta[3][4] = {{1,2,3,4},{5,6,7,8},{9,10,11,12}};
intb[3][4] = {{1,1,1,1},{2,2,2,2},{3,3,3,3}};
intc[3][4];
for(i= 0; i< 3; i++)
{
for(j= 0; j< 4; j++)
{
c[i][j]= a[i][j] + b[i][j];
}
}
for(i= 0; i< 3; i++)
{
for(j= 0; j< 4; j++)
{
printf("%5d",c[i][j]);
}
printf("\n");
}
}
二維數(shù)組的初始化
完全初始化(所有元素都賦初值)
int a[3][4] ={{1,2,3,4},{5,6,7,8},{9,10,11,12}};
部分初始化(未賦初值的,默認為0)
int a[3][4] = {{1,2}, {5}, {9,10,11}};
a[0][0] -->1
a[0][1] -->2
a[0][2] -->0
a[1][0] -->5
a[1][1] -->0
....
省略行數(shù)(行數(shù)不寫,編譯器能自動計算出行數(shù)是3)
int a[][4] ={{1,2,3,4},{5,6,7,8},{9,10,11,12}};
不可以這樣
int a[3][] ={{1,2,3,4},{5,6,7,8},{9,10,11,12}}; //錯,列不可以省略
int a[3][] = {{1,2}, {5}, {9,10,11}}; //如果這樣寫,編譯器就不知道有多少列
3. 輸出楊輝三角形 輸出10階即可
1
1 1
1 2 1
1 3 3 1
1 4 6 4 1
1 5 10 10 5 1
1 6 15 20 15 6 1
思路:可以用一個有10行10列的二維數(shù)組, 第一列固定值 1
計算 a[i][j] = a[i - 1][j] + a[i - 1][j - 1];
#include
int main()
{
inta[10][10] = {{1},{1},{1},{1},{1},{1},{1},{1},{1},{1}};
inti,j;
for(i= 1; i< 10; i++)
{
for(j= 1; j< 10; j++)
{
a[i][j]= a[i - 1][j - 1] + a[i - 1][j];
}
}
for(i= 0; i< 10; i++)
{
for(j= 0; j< 10; j++)
{
if(a[i][j]!= 0)
printf("%5d",a[i][j]);
}
printf("\n");
}
}
///如何產(chǎn)生隨機數(shù): 未知的數(shù)
例:
#include
int main()
{
while(1)
{
inta = rand() % 35 + 1; //rand 能產(chǎn)生隨機數(shù)
printf("ais %d\n", a);
getchar(); //等按下回車鍵
}
}
驗證,并調(diào)出bug(重復運行)
面試題: c語言如何產(chǎn)生隨機數(shù)? (rand函數(shù))
rand 是真隨機數(shù)還是偽隨機數(shù) ? (偽隨機數(shù))
為什么是偽隨機數(shù)? rand 是通過一個計算公式算出的隨機數(shù),并且通過一個隨機種子算的
默認隨機種子是1,所以隨機數(shù)序列總是一樣的
處理隨機數(shù): 用一個不同的隨機種子
#include
int main()
{
srand(5); //srand 能為rand函數(shù)提供一個隨機種子
while(1)
{
inta = rand() % 35 + 1; //rand 能產(chǎn)生隨機數(shù)
printf("ais %d\n", a);
getchar(); //等按下回車鍵
}
}
改進
#include
int main()
{
intn;
scanf("%d",&n);
srand(n); //srand 能為rand函數(shù)提供一個隨機種子
while(1)
{
inta = rand() % 35 + 1; //rand 能產(chǎn)生隨機數(shù)
printf("ais %d\n", a);
getchar(); //等按下回車鍵
}
}
繼續(xù)改進,種子應該是誰都不知道的,變化的
#include
int main()
{
while(1)
{
inta = time(0); //從1970.1.1 0:0:0到目前經(jīng)過的秒值
printf("ais %d\n", a);
getchar();
}
}
#include
int main()
{
srand(time(0)); //srand 能為rand函數(shù)提供一個隨機種子, srand只執(zhí)行一次即可
while(1)
{
inta = rand() % 35 + 1; //rand 能產(chǎn)生隨機數(shù)
printf("ais %d\n", a);
getchar(); //等按下回車鍵
}
}
1. 隨機生成一個1-10的數(shù),讓對方猜5次,如果猜對了,提示"congratulations !!"
如果猜錯了,提示"bigger" 或 "smaller"
#include
int main()
{
srand(time(0)); //srand 能為rand函數(shù)提供一個隨機種子, srand只執(zhí)行一次即可
inta = rand() % 10 + 1;
inti, n;
for(i= 0; i< 5; i++)
{
scanf("%d",&n);
if(n>a)
printf("bigger\n");
elseif(n< a)
printf("smaller\n");
else
{
printf("congratulations!!\n");
break; //結(jié)束整個循環(huán)
}
}
}
2. 中國福利彩票35選7
隨機生成1-35內(nèi)不重復的7個數(shù)字
然后讓用戶選擇自己的一組號碼
中獎規(guī)則:猜中
7個500萬
6個100萬
5個1萬
4個5000
3個500
0,1,2個沒中獎
分步:
1. 產(chǎn)生7個隨機數(shù)(隨機數(shù)用數(shù)組存) , 最好不重復(后做)
2. 輸入7個數(shù)
3. 交叉比較,計算出中了幾個
4. 計算中獎規(guī)則
#include
int main()
{
inta[7] = { 0 }, b[7] = { 0 };
inti, j, c = 0;
srand(time(0));
for(i= 0; i< 7; i++) //產(chǎn)生7個隨機數(shù)
{
a[i]= rand() % 35 + 1;
//去重復(每個新出的數(shù)和原來的數(shù)比較 )
for(j= 0; j< i; j++)
{
if(a[i]== a[j])
{
i--;
break;
}
}
}
printf("pleaseinput 7 number:"); //輸入7個數(shù)
scanf("%d%d%d%d%d%d%d",&b[0], &b[1], &b[2], &b[3], &b[4], &b[5], &b[6]);
printf("rand:%d %d %d %d %d %d %d\n", a[0], a[1], a[2], a[3], a[4], a[5], a[6]);
for(i= 0; i< 7; i++) //交叉比較中了幾個數(shù)
{
for(j= 0; j< 7; j++)
{
if(b[i]== a[j])
{
c++;
break;
}
}
}
printf("cis %d\n", c);
switch(c) //判斷中獎規(guī)則
{
case7:
printf("500wan\n");
break;
case6:
printf("100wan\n");
break;
case5:
printf("1wan\n");
break;
case4:
printf("5000\n");
break;
case3:
printf("500\n");
break;
default:
printf("sorryagain\n");
break;
}
}
你是否還在尋找穩(wěn)定的海外服務器提供商?創(chuàng)新互聯(lián)www.cdcxhl.cn海外機房具備T級流量清洗系統(tǒng)配攻擊溯源,準確流量調(diào)度確保服務器高可用性,企業(yè)級服務器適合批量采購,新人活動首月15元起,快前往官網(wǎng)查看詳情吧