c++一些问题总结
<span style="font-family: Arial, Helvetica, sans-serif; background-color: rgb(255, 255, 255);"><span style="font-size:18px;">这里总结一些c++常遇到的问题</span></span>
不同类型之间的转换。
<span style="font-size:18px;">//1 string --> const char*
std::string s_1 = "lsw";
const char *cs_1 = s_1.c_str();
printf("const char * cs is %s \n", cs_1); //2 const char* --> string
const char *cs_2 = "lsw";
std::string s_2(cs_2);
printf("std::string s_2 is %s\n", s_2.c_str()); //3 string --> char*
std::string s_3 = "lsw";
char *cs_3;
auto len = s_3.length();
cs_3 = new char[len + 1];
char *res_3 = strcpy(cs_3, s_3.c_str());
printf("string to char* === %s", res_3); //4 char* --> string
char *cs_4 = "lsw"; //c++ 11标准中这里有警告,不推荐这么用
std::string s_4(cs_4); //5 const char* --> char *
const char* cs_5 = "lsw";
char *cs_6 = new char[100];//足够大
char *res_5 = strcpy(cs_6, cs_5); </span><p class="p1"><span style="font-size:18px;"><span class="s1"> printf</span><span class="s2">(</span>"cs_6 = %s \n"<span class="s2">, cs_6);</span></span></p><p class="p1"><span class="s2"><span style="font-size:18px;">
</span></span></p>
string, const char* ---> int, double, long
<span style="font-size:18px;">double atof(const char *);
int atoi(const char *);
long atol(const char *);</span>
int --- > string
<span style="font-size:18px;"> char buff[100];
sprintf(buff, "%d", 990);
std::string sb = buff;</span>
已知strcpy的函数原型:char *strcpy(char *strDest, const char *strSrc)其中strDest 是目的字符串,strSrc 是源字符串。不调用C++/C 的字符串库函数,请编写函数 strcpy
/**
已知strcpy函数的原型是
char *strcpy(char *strDest, const char *strSrc);
其中strDest是目的字符串,strSrc是源字符串。
(1)不调用C++/C的字符串库函数,请编写函数 strcpy
(2)strcpy能把strSrc的内容复制到strDest,为什么还要char * 类型的返回值?
答:为了 实现链式表达式。
例如 int length = strlen( strcpy( strDest, “hello world”) );
*/
char *myStrcpy(char *str1, const char *str2) {
assert(str1 != nullptr && (str2 != nullptr));
char *res = str1;
while ((*str1++ = *str2++) != '\0') {
continue;
} return res;
} int myStrLen(const char* str) {
assert(str != nullptr);
auto len = 0;
while (*str++ != '\0') {
++ len;
} return len;
}
其他的一些知识
1、sizeof 和 strlen char a[] = "12";
//这里sizeof输出 3 是a的位数包括 '\0'
cout << sizeof(a) << endl; char *p = a;
//输出 8,是指针p的字节数
cout << sizeof(p) << endl; char *str = "12";
//输出 2,不包含'\0'
cout << strlen(str) << endl; 2、宏定义
#define Min(a, b) ((a)>=(b)?(b):(a)) 3、string定义 .h
//
// MyString.h
// TestCPP
//
// Created by lsw on 14-12-24.
// Copyright (c) 2014年 lsw. All rights reserved.
// #ifndef __TestCPP__MyString__
#define __TestCPP__MyString__ #include <stdio.h>
class MyString {
public:
MyString(const char *str = NULL); // 普通构造函数
MyString(const MyString &other); // 拷贝构造函数
~MyString(void); // 析构函数
MyString & operator =(const MyString &other); // 赋值函数
private:
char *m_data; // 用于保存字符串 private:
int myStrlen(const char* str);
}; #endif /* defined(__TestCPP__MyString__) */ .cpp
//
// MyString.cpp
// TestCPP
//
// Created by lsw on 14-12-24.
// Copyright (c) 2014年 lsw. All rights reserved.
// #include "MyString.h"
#include <iostream>
#include <assert.h> MyString::MyString(const char* str) {
if (str == nullptr) {
m_data = new char[1];
m_data[0] = '\0';
} else {
auto len = myStrlen(str);
m_data = new char[len + 1];
assert(m_data != nullptr);
strcpy(m_data, str);
}
} MyString::MyString(const MyString &other) {
auto len = strlen(other.m_data);
m_data = new char[len + 1];
assert(m_data != nullptr);
strcpy(m_data, other.m_data);
} MyString::~MyString() {
delete [] m_data;
} MyString & MyString::operator=(const MyString &other) {
if (this == &other) {
return *this;
} delete [] m_data;
auto len = strlen(other.m_data);
m_data = new char[len + 1];
assert(m_data != nullptr);
strcpy(m_data, other.m_data);
return *this;
} int MyString::myStrlen(const char *str) {
assert(str != nullptr); int len = 0;
while (*str++ != '\0') {
++len;
} return len;
}
随机推荐
- ibernate学习笔记5---实体类或属性名与数据库关键字冲突、hql命名参数、hql实现通用分页
一.实体类或属性名与数据库关键字冲突问题1.实体类名与数据库中的关键字冲突比如:实体表User与oracle中的系统表冲突解决方式1:在xml中添加table属性,指定表名,使其不与name默认相等 ...
- hdu4760Good Firewall
4760 数组模拟就可以了 读的时候可以整数读入 #include <iostream> #include<cstdio> #include<cstring> #i ...
- laravel重要概念和知识点
Service Provider: 一个laravel service provider就是一个注册IoC container binding的类.实际上,laravel本身就自包含了一堆管理核心框架 ...
- 用sql获取某字符串中的数字部分的语句
create function dbo.F_Get_No ( @No varchar(100) ) RETURNS bigint AS BEGIN WHILE PATINDEX('%[^0-9]%', ...
- (六) 6.1 Neurons Networks Representation
面对复杂的非线性可分的样本是,使用浅层分类器如Logistic等需要对样本进行复杂的映射,使得样本在映射后的空间是线性可分的,但在原始空间,分类边界可能是复杂的曲线.比如下图的样本只是在2维情形下的示 ...
- Linux/Unix shell 监控Oracle实例(monitor instance)
使用shell脚本实现对Oracle数据库的监控与管理将大大简化DBA的工作负担,如常见的对实例的监控,监听的监控,告警日志的监控,以及数据库的备份,AWR report的自动邮件等.本文给出Linu ...
- ssh 或者 scp 无需输入密码的解决办法
这里假设主机A(192.168.100.3)用来获到主机B(192.168.100.4)的文件. 在主机A上执行如下命令来生成配对密钥: ssh-keygen -t rsa 遇到提示回车默认即 ...
- C#利用最新版的WPS实现导入导出
微软的EXCEl操作相信大家也知道,不方便,安装包太大,而且表格的数据量也只有6000多(是6000多还是60000多我就忘记了),在导出导入大量数据的就没办法,而wsp表格则实现了百万数据的容量,而 ...
- [Papers]MHD, $\p_3\pi$, Lebesgue space [Zhang-Li-Yu, JMAA, 2013]
$$\bex \p_3\pi\in L^p(0,T;L^q(\bbR^3)),\quad \frac{2}{p}+\frac{3}{q}=2,\quad \frac{3}{2}\leq q\leq 3 ...
- LR之Java虚拟用户
1.认识Java虚拟用户 2.Java虚拟用户的适用范围