第二十三篇 -- 研究下函数(六)—— 综合实例

两个实例

一、判断素数

// IsPrimeNumber.cpp : This file contains the 'main' function. Program execution begins and ends there.
//

#include "pch.h"
#include <iostream>
using namespace std;

#include <cmath>

bool IsPrimeNumber(int num);

int main()
{
    cout << "——判断是否是素数——" << endl; 
    int num = 0;
    cout << "请输入一个正整数:" << endl;
    cin >> num;
    while (num > 0) {
        if (IsPrimeNumber(num)) {
            cout << num << "是一个素数" << endl;
        }
        else {
            cout << num << "不是一个素数" << endl;
        }
        cout << endl << "请输入一个正整数:" << endl;
        cin >> num;
        if (num == 0) {
            break;
        }
    }

    return 0;
}

bool IsPrimeNumber(int num) {
    if (1 == num || 2 == num) {
        return true;
    }

    int s = static_cast<int>(sqrt(num));          //求平方根
    for (int i = 2; i <= s; i++) {//从2开始遍历,直到平方根
        if ((num % i) == 0) {        //如果可以整除,则不是素数
            return false;
        }
    }
    return true;
}

 

加了一个输入0就退出循环的条件。

 

二、分割字符串

#include "pch.h"
#include <iostream>
using namespace std;

#include <assert.h> 

int SplitString(char *dest,
    char token,
    char *str1,
    char *str2);

int main()
{
    cout << "——分割字符串——" << endl;    //输出提示信息

    const int LEN = 16;       //字符串长度变量

    cout << "请输入字符串:" << endl;
    char dest[LEN] = { '\0' };  //初始化目标字符串
    cin >> dest;                //输入目标字符串

    cout << "请输入一个分解字符:" << endl;
    char token = ' ';       //分界字符变量
    cin >> token;           //输入分界字符
    cout << endl;

    char str1[LEN] = { '\0' };       //初始化字符串
    char str2[LEN] = { '\0' };

    int index = SplitString(dest, token, str1, str2);    //调用分割字符串的函数
    cout << "字符串在位置" << index << "分割成两个字符串: " << endl;
    cout << str1 << '\t' << str2 << endl;

    return 0;
}

int SplitString(char *dest, //目标字符串
    char token,     //分界字符
    char *str1,     //分界字符前的字符串
    char *str2)     //分界字符后的字符串
{
    assert(dest);        //检验参数的有效性
    assert(str1);
    assert(str2);

    int index = 0;     //保存分界位置的变量
    bool befToken = true;     //是否在标志前
    while (*dest != '\0') {    //遍历整个目标字符串
        if (*dest != token) {    //如果当前字符不是分界字符
            if (befToken) {      //如果在分界字符前
                index++;        //分界位置加1
                *(str1++) = *(dest++);      //保存分界字符前的字符串
            }
            else {
                *(str2++) = *(dest++);      //保存分界字符后的字符串
            }
        }
        else {
            befToken = false;           //跨越了分界字符
            dest++;                     //处理下一个字符
        }
    }
    *str1 = '\0';        //标识字符串的结尾
    *str2 = '\0';
    return index;
}

 

关于assert检验参数的合法性这一块,还是需要注意的。频繁的使用会影响程序的性能。http://www.169it.com/article/11369597425660380263.html

 

posted @ 2019-08-13 11:27  o云淡风轻o  阅读(166)  评论(0编辑  收藏  举报