/*
 4.字符串
 xaye , 夏夜
 C:char[] , char*
 
 C++:string
 string 是一個對象,會整體講對象的概念,我們會手寫一套自己的 string 類, 也是在std命名空間下
*/
#include<iostream>
//#include<cstring> // 要導入的頭文件
//#include<string> 
using namespace std;

int main() {
    // xaye , 夏夜

    string name = {"xaye"};
    cout << "My name is " << name << endl;
   

    return 0;
}
xaye@orange:~/code/dev/10$ ./a.out 
My name is xaye

#include<iostream>
//#include<cstring> // 要導入的頭文件
//#include<string> 
using namespace std;

int main() {
    // xaye , 夏夜

    string name = {"xaye"};
    cout << "My name is " << name << endl;

    string name2 = "Xaye1";

    cout << "name2 first is : " << name2[0] << endl;
   

    return 0;
}
xaye@orange:~/code/dev/10$ ./a.out 
My name is xaye
name2 first is : X

string 之所以可以用角標獲取 char 是因為 string 的運算符重載


#include<iostream>
//#include<cstring> // 要導入的頭文件
//#include<string> 
using namespace std;

int main() {
    // xaye , 夏夜

    // 常見操作
    string str1 = "penguin";
    string str2, str3;

    cout << "You can assign one string object to another : str2 = str1 " << endl;
    str2 = str1;
    cout << "str1: " << str1 << ", str2: " << str2 << endl;

    str2 = "buzzard";
    cout << "str2: " << str2 << endl;

    str3 = str1 + str2;
    cout << "str1 + str2 = " << str3 << endl;

    str1 += str2; // 等價於 str1 = str1 + str2;
    cout << "str2: " << str2 << endl;

    str2 += "for a day";
    cout << "str2: " << str2 << endl;
    
   

    return 0;
}
xaye@orange:~/code/dev/10$ ./a.out 
You can assign one string object to another : str2 = str1 
str1: penguin, str2: penguin
str2: buzzard
str1 + str2 = penguinbuzzard
str2: buzzard
str2: buzzardfor a day

#include<iostream>
//‘strcat’ is defined in header ‘<cstring>’; did you forget to ‘#include <cstring>’?
#include<cstring> // 要導入的頭文件
//#include<string> 
using namespace std;

int main() {
    // xaye , 夏夜

    char name1[] = {'1', '1', '1', '1', '\0'};
    char name2[] = {'2', '2', '2', '2', '\0'};
    char name3[20];

    cout << "name1: " << name1 << ", name2: " << name2 << endl;

    // 如果想 name2 +=name1
    strcat(name2, name1);
    cout << "name2 + name1 = " << name2 << endl;

    // 如果想 name2 = name1 怎麼操作? strcpy 是一個c方法,c++中不常用
    strcpy(name2, name1);
    cout << "name1: " << name1 << ", name2: " << name2 << endl;

    // 如果想要拼接? name3 = name1 + name2; strcat 也是一個c方法,c++中不常用
    strcat(name3, name1);
    strcat(name3, name2);
    cout << "name3: " << name3 << endl;
    
   

    return 0;
}
xaye@orange:~/code/dev/10$ ./a.out 
name1: 1111, name2: 2222
name2 + name1 = 22221111
name1: 1111, name2: 1111
name3: 11111111111

#include<iostream>
#include<cstring> // 要導入的頭文件
//#include<string> 
using namespace std;

int main() {
    // xaye , 夏夜

    string name1;
    char name2[20];

    cout << "name1 len: " << name1.size() << endl;

    // 這種寫法 會讀到 \0 結束
    cout << "name2 len: " << strlen(name2) << endl;
   

    return 0;
}
xaye@orange:~/code/dev/10$ ./a.out 
name1 len: 0
name2 len: 6 // char name2[20]

name2 len: 4 // char name2[20] = "xaye";