字符串數組的長度判斷


在面試的時候突然遇到一個問題,面試官給出一個字符串數組,我該怎么去保存這個字符串數組呢,保存好以后又怎么把這個字符串數組利用起來,

我一開始想到的是用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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM