數組不能作為入口參數傳給函數
只能上傳地址
//例如
int func(int a) // 接收數組a
{return a;
}
int main()
{int a[3] = {1, 2, 3 };
func(a); // 上傳數組a
}
上述情況會報錯
只能通過上傳地址的方式來上傳數組
// 例如
int func(int *a)
int func(int a[]) //兩種方式等價
相對應的
// 例如
(*p+i)=2;
p[i] = 2; //兩者也等價
//例如
#include#include#includeusing namespace std;
void func(int a[])
{for (int i = 0;i< 3;i++)
{a[i] = 10;
}
}
int main()
{int a[3] = {1, 2, 3 };
func(&a[0]); // 注意此處寫成&a[0]也可以,表示指針放在0位
for (int i = 0;i< 3;i++)
{cout<< a[i]<< " ";
}
}
函數內部函數函數內部函數只能在函數內部使用,在函數完成之后就被銷毀
從外部調用時非法的
//例如
#include#include#includeusing namespace std;
int* func(int a,int b) //返回指針類型的
{int c = a + b;
return &c; // c是地址
}
int main()
{int a = 3;
int b = 4;
int *d = func(a,b); // 用*d來接受
cout<< *d; // 輸出d
}
以上情況盡管可以運行,但是是非法的
不可以對函數內部變量內存進行操作
函數內部變量的內存地址不可隨便輸出
不可以輸出一個訪問函數內部變量的引用
容易發(fā)生崩潰及程序錯亂
單引號為字符類型
雙引號為字符串類型
字符串存儲在數組中;
需要提前開辟一塊足夠大的內存空間;
存儲字符串的數組的大小要大于字符串長度+1;
存儲三個字符串abc的數組a[3]是不夠的,需要至少四個;
//字符串的兩種創(chuàng)建形式
int main()
{char a[4] = "abc";
const char *p = "123";
}
字符串結尾\0之所以說一個"abc"字符串需要至少四個空間,是因為字符串的結尾都是用‘\0’來表示的,所有字符串的結尾都認為有一個‘\0’,不會顯示出來
注意,‘\0’一定是單引號!
//例如
#include#include#includeusing namespace std;
int main()
{char a[4] = "abc";
cout<< a[3]<< "\n"; // "abc"索引只到2,但是輸出索引3不會報錯,但是輸出結果什么也沒有
cout<< (int)a[3]; // 強制類型轉換,如果轉換成數字,會發(fā)現是0
}
//顯示
0
//例如
int main()
{char a[100] = "apple";
a[3] = '\0'; //在索引為3也就是,l的位置重新賦值為'\0'
cout<< a<< "\n";
cout<< a[4]; // 字符串雖然被截斷,但是截斷后面的字符串還是可以索引到
}
//顯示
app //結果只顯示'\0'之前的,表示在'\0'就停止了
e //截斷后面的字符串還是可以索引到
聲明的時候手動添加’\0’
/例如
int main()
{char a[100] = "app\0le";
cout<< a<< "\n";
cout<< a[4];
}
//顯示
app //可以看到,在聲明的時候,如果加入了'\0',則系統(tǒng)認為該字符串在此處停止
l // 但是后面的字符串還是能夠索引得到
計算字符串長度//例如
int len(char a[]) //注意此處上傳char a[],不是int a[]
{int i = 0;
for (;a[i] != '\0';i++) //循環(huán),在a[i] == '\0'處結束,
{ }
return i;
}
int main()
{char a[100] = "apple";
int x = len(a);
cout<< x ;
}
//顯示
5
字符串拼接//例如
int len(char a[]) // 求長度
{int i = 0;
for (;a[i] != '\0';i++)
{}
return i;
}
void sp(char a[], char b[],char outc[]) //字符串拼接
{int i, j;
for (i = 0;a[i] != '\0';i++)
{outc[i] = a[i];
}
for (j = 0;b[j] != '\0';j++)
{outc[j + i] = b[j];
}
outc[i + j] = '\0';
}
int main()
{char a[100] = "apple";
char b[100] = "orange";
char c[100];
sp(a, b, c);
cout<< c<< "\n";
int x = len(c);
cout<< x ;
}
//顯示
appleorange
11
字符串函數需要在前面加聲明,才能使用這些函數
#define _CRT_SECURE_NO_WARNINGS
strcatstrcat(a,b):可以將字符串a和字符串b拼接起來,返回一個指向返回值的指針
//例如
int main()
{char a[100] = "apple";
char b[100] = "orange";
char *p;
p = strcat(a, b); //返回值是個指針
cout<< p;
}
//顯示
appleorange
strcpychar * strcpy(char * strDest,const char * strSrc);將const char * strSrc(源地址:被復制的字符串的首地址,用const修飾,避免修改掉被拷貝的字符串),復制到char * strDest(目標字符串的首地址)中去,返回的是目標字符串的首地址
strcpy(a,b)將b的值拷貝到a中,會將a的值覆蓋
//例如
int main()
{char a[100] = "apple";
char b[100] = "orange";
char c[100] = "a";
char *p;
p = strcpy(a, c);
cout<< p<<"\n";
cout<< a;
}
//顯示
a // 覆蓋掉a原來的值
a // 輸出a,發(fā)現也是一樣
strcmpextern int strcmp(const char *s1,const char *s2);
strcmp(a,b)比較兩個字符串,如果a=b則返回0,a>b,則返回正數,a//例如
int main()
{char c[100] = "a";
char d[100] = "b";
char e[100] = "c";
char *p;
int m = strcmp(c, d);
int n = strcmp(e, c);
cout<< m<<"\n";
cout<< n<< "\n";
cout<< strcmp(c, c)<< "\n";
}
strlen//顯示
-1 //右大于左
1 //左大于右
0 //字符串相同
strlen(a);返回字符串長度;
//例如
int main()
{char a[100] = "apple";
int x = strlen(a);
cout<< x<< "\n";
}
/顯示
5
大小寫轉換//例如
void change(char *a)
{for (int i = 0;a[i] != '\0';i++)
{if (a[i] >='a' &&a[i]<='z')
{ a[i] = a[i] - 'a' + 'A';
}
else if (a[i] >='A' &&a[i]<='Z')
{ a[i] = a[i] - 'A' + 'a';
}
}
}
int main()
{char a[100] = "apPlE";
change(a);
for (int i = 0;a[i] != '\0';i++)
{cout<< a[i];
}
//顯示
APpLe
字符串變成數字
手寫//例如
int sTi(char* a)
{int n;
int res = 0;
int mi = 1;
for (n = 0;a[n] != '\0';n++)
{}
// n就是字符串長度
for (int i = n - 1;i >= 0;i--)
{res += (a[i] - '0') * mi;
mi = mi * 10;
}
return res;
}
int main()
{char a[100] = "315426";
int d = sTi(a);
cout<< d;
// 顯示
315426
函數atoi和atofatoi:將字符串轉換成為數字,整型;
atof:將字符串轉換成為數字,浮點型;
//例如
int main()
{char a[100] = "315426";
int d = atoi(a);
float e = atof(a);
cout<< d<< "\n";
cout<< e;
}
數字轉字符串//例如
void iTs(int a, char* res)
{int x[100];
int m = 0;
while (a != 0) //用while循環(huán)得到長度和數組倒序數組
{int b = a % 10;
a = a / 10;
x[m] = b;
m += 1;
}
for (int i = 0;i< m;i++) //將倒序數組倒序放到字符串中去
{res[m - 1 - i] = '0' + x[i];
}
res[m] = '\0';
}
int main()
{int a = 13546;
char res[100];
iTs(a, res);
//cout<< m;
for (int i = 0;res[i] != '\0';i++)
{cout<
//顯示
13546
string前面需要聲明
#includeusing namespace std;
利用string變量可以實現字符串相加
//例如
int main()
{string s = "abc"; //聲明成為string變量可以直接實現字符串拼接
string a = "123";
cout<< s + a;
}
//顯示
abc123
例題有一個字符串 “I am a good boy. I like sports.”,找出其中出現次數最多的字母,并且輸出它的出現次數
//例如
void FindMostTimesChar(char* pIn, char& outChar, int& outTimes)
{//一個數組初始化為0
int x[200];
for (int i = 0; i< 200; i++)
{x[i] = 0;
}
// 將大寫字母和小寫字母的出現次數存放在數組中
for (int i = 0;pIn[i] != '\0';i++)
{if (pIn[i] >= 'a' && pIn[i]<= 'z')
{ int q = pIn[i] - 'a'; //數組x的索引0-25存小寫字母;
x[q] += 1;
}
else if (pIn[i] >= 'A' && pIn[i]<= 'Z')
{ int q = pIn[i] - 'A'; //數組x的索引26-51存大寫字母出現次數;
x[q + 26] += 1;
}
}
//找到大值,也就是出現次數最多的字母的索引和次數
int maxnum = 0; // 大出現的次數
int maxid = 0; // 對應的索引,也就是是哪個字母
for (int i = 0;i< 52;i++)
{if (x[i] >maxnum)
{ maxnum = x[i];
maxid = i;
}
}
//按照規(guī)則還原成字母和次數
if (maxid >25)
{outChar = 'A' + (maxid - 26);
outTimes = maxnum;
}
else if (maxid< 25)
{outChar = 'a' + maxid;
outTimes = maxnum;
}
}
int main()
{char a[100] = "I am a good boy. I like sports.";
char res;
int num;
FindMostTimesChar(a, res, num);
cout<< res<< " "<< num;
}
//顯示
o 4
你是否還在尋找穩(wěn)定的海外服務器提供商?創(chuàng)新互聯www.cdcxhl.cn海外機房具備T級流量清洗系統(tǒng)配攻擊溯源,準確流量調度確保服務器高可用性,企業(yè)級服務器適合批量采購,新人活動首月15元起,快前往官網查看詳情吧
當前標題:【漫漫轉碼路】Day32C++day05-創(chuàng)新互聯
地址分享:http://muchs.cn/article26/dsegjg.html
成都網站建設公司_創(chuàng)新互聯,為您提供自適應網站、手機網站建設、網頁設計公司、電子商務、軟件開發(fā)、品牌網站設計
聲明:本網站發(fā)布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創(chuàng)新互聯