不使用庫函數,實現strcpy功能
不使用庫函數,複製源字符串到目標字符串中,即實現strcpy函數的功能。
思路:
1、函數的參數類型和返回類型肯定是字符指針,便於操作;
2、增加程序健壯性,對於參數需要進行檢查,並且對於可能的錯誤進行異常拋出。
3、利用一個臨時字符指針變量存放目標字符串的首地址。
4、將源字符串從首字母到最後的‘\0’賦值給目標字符串,最後返回臨時字符指針變量。
#include <iostream>
using namespace std;
char* my_strcpy(char* strdes, const char* strsrc)
{
if (NULL == strdes || NULL == strsrc) {
throw "參數錯誤";
}
char* temp = strdes;
while ((*strdes++ = *strsrc++) != '\0');
return temp;
}
int main() {
char a[20];
const char b[] = "hello world!";
my_strcpy(a, b);
cout << a << endl;
return 1;
}
char *a、char a[]、char a[20]都可以初始化長度可變的字符串,但是*a和char a[]初始化不能使用cin交互,而char a[20]可以通過cin交互。
*a會報使用了未初始化的局部變量,char a[]會報爲a未知大小。
逆序輸出字符串
不使用庫函數,寫一個函數,接收一個字符串作爲輸入參數,將其逆序輸出。
思路:檢查字符串‘\0’的位置,然後從該位置向前輸出字符。
#include <iostream>
using namespace std;
void output_reverse_string(char a[20])
{
if (NULL == a) throw("error parameter");
int i = 0,k;
while (i < 20) {
if (a[i] == '\0') {
k = i-1;
break;
}
i++;
}
cout << "reverst result is:";
for(;k>=0;k--)cout << a[k];
cout << endl;
}
int main() {
char a[20];
cout << "please input a string:";
cin >> a;
output_reverse_string(a);
return 1;
}
可使用string庫函數,寫一個函數,接收一個字符串作爲輸入參數,將其逆序輸出。
#include <iostream>
#include <string>
using namespace std;
int main() {
char a[20];
cout << "please input a string:";
cin >> a;
int k;
k = strlen(a);
for (; k >= 0; k--)cout << a[k];
cout << endl;
return 1;
}
對數組元素進行冒泡排序
使用冒泡法對數組元素排序
#include <iostream>
int* bubble(int *intlist, int len) {
/*思想:每一趟將最大值放置最後面,即從前往後,只要前面的值大於後面的值,就交換位置,10個數就跑9躺*/
int temp, i,j;
for (i = 1; i < len; i++) {
for (j = 0; j < len - i; j++) {
temp = intlist[j];
if (intlist[j] > intlist[j + 1]) {
intlist[j ] = intlist[j+1];
intlist[j + 1] = temp;
}
}
}
return intlist;
}
int main() {
int a[] = {11,25,14,58,36,10,5,9,7,6 };
int len;
len = sizeof(a) / 4;
for (int i = 0; i < len; i++)cout << a[i]<<" ";
int* b = bubble(a,len);
cout << endl;
for (int i = 0; i < len; i++)cout << b[i]<< " ";
return 1;
}
利用數組輸出Fibonacci數列
斐波那契數列: F(1)=1,F(2)=1, F(n)=F(n - 1)+F(n - 2)(n ≥ 3,n ∈ N*)
#include <iostream>
int main() {
int a[20] = { 1,1 };
for (int i = 2; i < 20; i++)a[i] = a[i - 1] + a[i - 2];
for (int j = 0; j < 20; j++)cout << a[j] << " ";
return 1;
}
判斷閏年年份
閏年是能被四整除,但不能被100整除或者是可以被400整除。
#include <iostream>
bool leap_year(int year) {
if ((year % 4 == 0 && year % 100 != 0) || (year % 400 == 0)) return true;
else return false;
}
int main() {
int year;
cout<< "please input year:";
cin >> year;
if (leap_year(year)) cout << endl << year << "是閏年";
else cout << endl << year << "不是閏年";
return 1;
}
輸出1000以內的素數
素數:大於一的整數,且只能被1和自己整除。
思路:使用for循環的兩層遍歷,外層遍歷從2到1000的所有可能是素數的數字,內層遍歷用於篩選出屬於素數的整數。
void mersenne(int rang) {
for (int i = 2; i <= rang; i++) {
static int flag = 1;
for (int j = 2; j <= i/2; j++) {
if (i % j == 0) {
flag = 0;
break;
}
else flag = 2;
}
if (flag > 0) cout << i << " ";
}
}
mersenne(1000)