/*ca33a_demo_c++33_CppPrimer_新旧代码的兼容_txwtech
旧代码:数组和c风格字符串
新代码:vector和string
相互转换:
c风格字符串<- ->string
数组<- ->vector
const char *str=st.c_str(); c_str后面的括号不要忘记写上
*/
/*ca33a_demo_c++33_CppPrimer_新旧代码的兼容_txwtech
旧代码:数组和c风格字符串
新代码:vector和string
相互转换:
c风格字符串<- ->string
数组<- ->vector
C3867错误。
https://docs.microsoft.com/zh-cn/cpp/error-messages/compiler-errors-2/compiler-error-c3867?f1url=https%3A%2F%2Fmsdn.microsoft.com%2Fquery%2Fdev15.query%3FappId%3DDev15IDEF1%26l%3DZH-CN%26k%3Dk(C3867)%26rd%3Dtrue&view=vs-2019
const char *str=st.c_str(); c_str后面的括号不要忘记写上
*/
#include <iostream>
#include <string>
#include <vector>
using namespace std;
int main()
{
string st("Hello World");
st = st + " bill";
cout <<"c++:string st: "<< st << endl;
const char *str=st.c_str();//c++转c风格字符串,必须加上const,常字符指针
cout << "c风格*str: "<<str << endl;
//getchar();
const size_t arr_size = 6;
int int_arr[arr_size] = {0,1,2,3,4,5};
vector<int> ivec(int_arr, int_arr + arr_size);//数组转vector, int_arr默认指针指向第一个,int_arr + arr_size指向最后一个的后面 [ 开区间,保活。 )闭区间不包括。前包后不包
cout << "间隔ivec:" << endl;
for (vector<int>::iterator itr = ivec.begin(); itr != ivec.end(); ++itr)
{
cout << *itr << endl;
}
cout << "间隔ivec2:" << endl;
vector<int> ivec2(int_arr+1,int_arr+4);//2,3,4的数据赋值到vector
for (vector<int>::iterator itr = ivec2.begin(); itr != ivec2.end(); ++itr)
{
cout << *itr << endl;
}
return 0;
}
/*ca33b_demo_c++_txwtech
vector数据放入数组
*/
#include <iostream>
#include <string>
#include <vector>
using namespace std;
int main()
{
vector<int> ivec;
int ival;
cout << "Enter number:(Ctrl+Z to end)" << endl;
while (cin >> ival)
ivec.push_back(ival);
int *parr = new int[ivec.size()];//创建动态数组
size_t ix = 0;
for (vector<int>::iterator iter = ivec.begin(); iter != ivec.end(); ++iter, ++ix)
parr[ix] = *iter;//vector数据放入数组
for (ix = 0; ix < ivec.size(); ++ix)
{
cout <<"vector to 数组" <<*(parr + ix) << endl;
}
delete[] parr;
return 0;
}
/*习题4.34—4.35—c++_txwtech
1.读入一组string数据,放入vector
3.vector字符串->字符指针数组,vector每个字符串--创建新的动态字符数组,
4.vector字符串复制到字符数组
5.字符数组放到动态字符指针数组里面
//while (cin >> str) //cin与getline方法,cin遇到空格就默认一个字符串,getline不识别空格,直到回车,默认一个字符串输入结束
while (getline(cin, str))
svec.push_back(str);//1
//创建动态字符指针数组
//数组里面放的指针
*/
/*习题4.34—4.35—c++_txwtech
1.读入一组string数据,放入vector
3.vector字符串->字符指针数组,vector每个字符串--创建新的动态字符数组,
4.vector字符串复制到字符数组
5.字符数组放到动态字符指针数组里面
//cin与getline方法,cin遇到空格就默认一个字符串,getline不识别空格,直到回车,默认一个字符串输入结束
*/
#define _CRT_SECURE_NO_WARNINGS
#include <iostream>
#include <string>
#include <vector>
using namespace std;
int main()
{
vector<string> svec;
string str;
cout << "enter strings: (ctrl+Z) to end" << endl;
while (cin >> str) //cin与getline方法,cin遇到空格就默认一个字符串,getline不识别空格,直到回车,默认一个字符串输入结束
svec.push_back(str);//1
//创建动态字符指针数组
//数组里面放的指针
char **parr = new char*[svec.size()];
size_t ix= 0;
for (vector<string>::iterator iter = svec.begin(); iter != svec.end(); ++iter, ++ix)
{
char *p = new char[(*iter).size() + 1];//*iter指向的是一个字符串//3
strcpy(p,(*iter).c_str());//vector转c风格//4
parr[ix] = p;//动态字符数组赋值给字符指针//5
}
cout << "content of vector: " << endl;
for (vector<string>::iterator iter = svec.begin(); iter != svec.end(); ++iter)
{
cout << *iter << endl;
}
cout << "Content of charactor arrays: " << endl;
for (ix = 0; ix != svec.size(); ++ix)
{
cout << parr[ix] << endl;
}
//每个指针delete
for (ix = 0; ix != svec.size(); ++ix)
{
delete parr[ix];
}
delete[] parr;
//getchar();
return 0;
}