在面試的時候突然遇到一個問題,面試官給出一個字符串數組,我該怎么去保存這個字符串數組呢,保存好以后又怎么把這個字符串數組利用起來,
我一開始想到的是用vector<string>存儲,
vector<string> vecstr={"i","work","at","byte","bytedance"};
但是,太年輕了,沒這種用法。至少c++98中不行!
(我看c++文檔中對vector的介紹,出現了這樣的賦值:
std::vector<int> v = {7, 5, 16, 8}; //c++17可以
那樣的話string類型的vector肯定也可以的,我把本地c++版本升級后,發現果然可以。
vector<string> vecstr={"i","work","at","byte","bytedance"};
這中用法只在 c++ 17可以
)
沒升級之前,只能另想辦法,那就使用數組吧
string str[]={"i","work","at","byte","bytedance"};
這樣存儲當然可以,在想得到str的長度時,我懵逼了,str.length()? 不行!沒這用法。sizeof(str)?不行!這樣得到的是str所占內存的大小。
那用str的內存大小除以每一項的內存大小總可以了吧,sizeof (str) / sizeof ( str[0] ) ,不行,每一項的長度不一樣,這樣算會不對勁,但是真的不行嗎?我查資料,寫代碼驗證。
#include<bits/stdc++.h> using namespace std; int main() { //string str[]={"i","work","at","byte","bytedance"}; vector<string> vecstr= {"i","work","at","byte000000000000000000000000000000000000000","bytedance"}; vector<int> vecint= {1,2,3,4,5}; for(string x: vecstr) { cout<<sizeof(x)<<" "<<x.length()<<endl; } return 0; }
運行截圖

我一開始以為sizeof(string)會返回string所占內存的大小,會隨着字符串長度的變化而變化,但實際上並沒有,string再長,sizeof返回的也是一個固定的值(不同的環境結果可能會不同)
所以說通過這種方式是可以求得字符串數組的數組長度的。sizeof ( str ) / sizeof ( str [ 0 ] ).
sizeof很特殊,不要把sizeof當成函數,也不要看作一元操作符,把他當成一個特殊的編譯預處理。
關於sizeof,更多資料可以參考
https://www.cnblogs.com/wanghetao/archive/2012/04/04/2431760.html
