C++:获取系统时间、将数字转换为字符串类型、函数返回指针变量(全局变量定义&new申请新空间)、字符串拼接重命名图像问题解决
2020-01-11 18:56
609 查看
涉及C++的一些简单问题
1. 如何获取系统时间问题
2. 如何准确的为指针函数返回指针变量并在主函数调用
- &定义全局变量
- &利用new开辟新的内存空间地址
3. 使用string头文件进行简单的字符串拼接问题解决**
1.获取系统时间并将数字类型转换为字符串类型
利用C++标准头文件windows.h可以获取毫秒级的系统时间
构建系统时间变量即可获取系统时间
SYSTEMTIME sys; GetLocalTime(&sys);
将系统时间类型由数字转换为字符串
- 可以先将其转换为流,然后再转换为字符串
stringstream ss; //定义流 string time_; //定义字符串类型时间 ss << sys.wYear; ss >> time_;
源代码如下:
#include <iostream> #include <windows.h>` void main() { SYSTEMTIME sys; GetLocalTime(&sys); stringstream ss; //定义流 string time_; //定义字符串类型时间 //将数字类型变量转化为流,依次表示年/月/日/小时/分钟/秒/毫秒/周几 ss << sys.wYear << ":" << sys.wMonth << ":" << sys.wDay << ":" << sys.wHour << ":" << sys.wMinute << ":" << sys.wSecond << ":" << sys.wMilliseconds << ":" << sys.wDayOfWeek; ss >> time_; //将流转化为字符串类型变量 cout << time_; cin.get(); }
输出结果说明
输出结果:2019年10月7日12时41分40秒997毫秒周一
2.函数返回指针变量
之前我写了一个返回指针变量的函数,功能就是获取系统的时间并返回系统时间变量的内存地址,但是读取在主函数中获取的内存地址中的值,一直是空,原因是对于函数中的局部变量来说,其在函数结束时就没有了,所以会出现这种情况,那么如果我们一定想从函数中返回指针变量呢,那么有两种方法:
- 定义全局变量
- 利用new申请新空间
定义全局变量
- 全局变量的定义
string year; //定义全局变量year,因为如果定义在子函数中,当子函数进程执行完毕,该变量会消失
- 在子函数中定义指针并将指针指向全局变量:
string* year_; year_ = &year; //将year_指针指向year变量
源代码如下
#include <iostream> #include <windows.h> using namespace std; string* gettime(); //声明指针函数 //定义全局变量来返回指针函数变量 string year; //定义全局变量year,因为如果定义在子函数中,当子函数进程执行完毕,该变量会消失int main() { string* year_; year_ = gettime(); cout << "主函数中输出内存地址:" << year_ << endl; cout << "主函数中市场及内存地址中值:" << *year_ << endl; cin.get();; return 0; } string* gettime() { SYSTEMTIME sys; GetLocalTime(&sys); stringstream ss; string* year_; ss << sys.wYear; ss >> year; year_ = &year; //将year_指针指向year变量 cout << "子函数中输出内存地址:" << year_ << endl; cout << "子函数中市场及内存地址中值:" << *year_ << endl; return year_; //返回内存地址指针 }
输出结果
利用new申请新空间
我们以获取系统时间年份为例:
- 声明指针函数
string* gettime();
- 在指针函数中new新空间,并将变量值放在新空间内
ss << sys.wYear; ss >> year; string *year_ = new string(year); return year_;
源代码如下:
#include <iostream> #include <windows.h> using namespace std; string* gettime(); //声明指针函数 int main() { string* year_; year_ = gettime(); cout << "主函数中输出内存地址:" << year_ << endl; cout << "主函数中市场及内存地址中值:" << *year_ << endl; //delete year_string; //想取消新空间的话,直接delete即可 //cout << *year_ << "mmms"; cin.get();; return 0; } string* gettime() { SYSTEMTIME sys; GetLocalTime(&sys); stringstream ss; string year; ss << sys.wYear; ss >> year; string *year_ = new string(year); //使用new申请新空间 cout << "子函数中输出内存地址:" << year_ << endl; cout << "子函数中市场及内存地址中值:" << *year_ << endl; return year_; //返回内存地址指针 }
输出结果:
3.字符串拼接重命名图像问题
因为想从获取系统时间来为照片命名,所以需要用到字符串拼接,之前看网上说的好复杂,其实只要使用+即可完成,感觉和python类似。
定义一个根路径字符串和后缀名字符串:
string head_path("E://5-MaterialPicture"); string suffix_name(".jpg");
opencv读取图片:
img = imread(head_path + "//xx.jpg", 0);
将获取的系统时间进行字符串拼接保存重命名后的图像:
imwrite(head_path + "//" + *year_ + "_xx" + suffix_name, img);
4.总的源代码:
该源代码实现了获取系统时间,并将系统时间为名称进行拼接重命名图像的功能。重命名后的的图像名称为2019_xx.jpg,可以将命名名称细化到毫秒级,那么每一次保存的图像都可以保证名称不同,从而不会产生覆盖现象。
#include <iostream> #include <windows.h> #include<opencv2/core.hpp> #include<opencv2/highgui.hpp> #include<opencv2/imgproc.hpp> using namespace std; using namespace cv; string* gettime(); int main() { string head_path("E://5-MaterialPicture"); string suffix_name(".jpg");string* year_; year_ = gettime(); Mat img; img = imread(head_path + "//xx.jpg", 0); imwrite(head_path + "//" + *year_ + "_xx" + suffix_name, img);imshow("ss", img); waitKey(0); return 0; } string* gettime() { SYSTEMTIME sys; GetLocalTime(&sys); stringstream ss; string year; ss << sys.wYear; ss >> year; string *year_ = new string(year); return year_; //返回内存地址指针 }
2019.10.7
希望能帮到大家。
- 点赞
- 收藏
- 分享
- 文章举报
相关文章推荐
- 后台date类型转换为json字符串时,返回前台页面的是long类型的时间戳问题解决
- 数字类型、字符串类型常用转换,数据精度问题解决
- C/C++学习之C提高----C数组的定义、类型、定义数组指针变量、多维数组的本质、多维数组做函数参数、将两个数组中的字符串copy到第三个数组
- 为下面的函数原型编写函数定义: int ascii_to_integer(char *str); 这个字符串参数必须包含一个或者多个数字,函数应该把这些数字字符转换为整数并返回这个整数。如果字符串参数
- 【c语言】为下面的函数原型编写函数定义,这个字符串参数必须包含一个或者多个数字,函数应该把这些数字字符转换为整数并返回这个整数。
- eCos系统无法正确链接到在C++源文件里自己定义的cyg_user_start函数的问题和解决的方法
- 后台date类型转换为json字符串时,返回前台页面的是long time值问题解决
- c++中定义一个全局变量,子函数修改变量后,主函数没有改变问题
- C++获取Lua全局变量和执行Lua多参数多返回值函数
- 解决C/C++语言中全局变量重复定义的问题
- C/C++语言中全局变量重复定义问题的解决方法
- JS一起学03:js组成、下拉+text、字符串拼接、分号问题、数据类型、变量类型、作用域和闭包、命名、运算符、流程判断、调试、iNow、onchang
- 后台date类型转换为json字符串时,返回前台页面的是long time值问题解决
- C++ 获取系统时间并且转换成字符串
- C++ 获取系统时间并且转换成字符串
- C++获取系统当前时间并以字符串格式返回
- JavaScript 特有奇葩问题“字符串类型与数字类型混乱”的分析与解决,与类型转换
- android自己定义Application全局变量不能类型转换的问题
- 解决C/C++语言中全局变量重复定义的问题
- Android 获取当前系统时间 时间之间的转换 判断字符串是否日日期类型