char的初始化:
char name_buff[64];
char abc[10] = "ni hao bu";
const char *firstName = "nihao,";
string转char*,:主要有三种方法,分别是:data(); c_str(); copy();
string转char[],知道string的长度,可以根据length()函数得到,又可以根据下标直接访问,所以用一个循环就可以赋值了。
char * 转string,char[] 转string是一样的:可以直接赋值。例如
const char *p03 = "hello"; string s = p03; cout << s << endl;
char c01[8] = "nihaobu"; string s01 = c01; cout << "s01:" << s01 << endl;
/*
字符串、字符的拼接、互转
string转char*
string转char[]
char * 转string 可以直接赋值。
char[] 转string 可以直接赋值
*/
#if 1
#include <iostream>
#include <stdio.h>
#include <string.h>
#include <string>
using namespace std;
int main()
{
char greeting[6] = { 'H', 'e', 'l', 'l', 'o'/*, '\0'*/ };
printf("Greeting message: %s\n", greeting);
/* =========================== 01 字符串拼接 ==================================== */
char str1[12] = "Hello";
char str2[12] = "World";
char str3[12];
int len;
/* 复制 str1 到 str3 */
strcpy_s(str3, str1);
printf("strcpy( str3, str1) : %s\n", str3);
/* 连接 str1 和 str2 */
strcat_s(str1, str2);
printf("strcat( str1, str2): %s\n", str1);
/* 连接后,str1 的总长度 */
len = strlen(str1);
printf("strlen(str1) : %d\n", len);
/*
使用sprintf_s进行多字符串拼接
*/
char name_buff[64];
const char *firstName = "nihao,";
const char *secName = "jhy,";
char abc[10] = "ni hao bu";
string sha = "sha";
//sprintf_s(name_buf, "%d-%d-%d__%02d-%02d-%02d-%03d", sys.wYear, sys.wMonth, sys.wDay, sys.wHour, sys.wMinute, sys.wSecond, sys.wMilliseconds);
sprintf_s(name_buff, "%s%s%s%s", firstName, secName, abc, sha); //string类型是C++中的,printf是C中的,因此无法输出。sprintf_s也不行。
cout << __LINE__ << " strcat:" << name_buff << endl;
sprintf_s(name_buff, "%s%s%s%s", firstName, secName, abc, sha.c_str()); //可以用sha.c_str()转化成char型的。就可以了。
cout << __LINE__ << " strcat:" << name_buff << endl;
/* =========================== 02 互转 ==================================== */
// 结论,char转string容易,string转char复杂。string类型容纳性更好。string.c_str()方便一些。
/* 01
string转char* :主要有三种方法,分别是:data(); c_str(); copy();
*/
string str = "string->char";
const char* p = str.data(); //加const 或者用char * p=(char*)str.data();的形式
cout << __LINE__ << " __[string->char]: " << p << endl;
/*const char*是不能直接赋值到char*的,这样编译都不能通过,
理由:假如可以的话,那么通过char*就可以修改const char指向的内容了,这是不允许的。
所以char*要另外开辟新的空间,即上面的形式。*/
string str01 = "world";
const char *p01 = str01.c_str(); //同上,要加const或者等号右边用char*
cout << __LINE__ << " __[string->char]: " << p01 << endl;
复杂也不好
//string str02 = "hmmm";
//char p02[50];
//str02.copy(p02, 5, 0); //这里5代表复制几个字符,0代表复制的位置,
//* (p02 + 5) = '\0'; //注意手动加结束符!!!
//cout << __LINE__ << "__[string->char]: " << p02 << endl;
/* 02
string转char[],知道string的长度,可以根据length()函数得到,又可以根据下标直接访问,所以用一个循环就可以赋值了。
*/
string pp = "dagah";
char p04[8];
int i;
for (i = 0; i < pp.length(); i++)
p04[i] = pp[i];
p04[i] = '\0';
printf("%s\n", p04);
cout << p04 << endl;
/* 03
char * 转string,char[] 转string是一样的:可以直接赋值。
*/
const char *p03 = "hello"; //直接赋值
string s = p03;
cout << s << endl;
char c01[8] = "nihaobu";
string s01 = c01;
cout << "s01:" << s01 << endl;
getchar();
return 0;
}
#endif