2017-11-06 23 views
0

名前(タイプ文字列)の最初の文字をsubstr(0,1)で取得しようとしました。しかし、私はそれを指すポインターを1つのリンクされたリストに入れたい。リンクリストの文字列から最初の文字を取得する方法は?

このように書いたのはh->name.substr(0,1)です。ここで(h)はポインタで、(name)は構造体の文字列型です。

struct empType{ 
    string name; 
    empType *next; 
}; 

しかし、私がh->name.substr(0,1)を印刷すると、(NULL)と表示されます。

リンクリストが存在し、(h)が最初のノードを指すポインタであるとします。 0の値

h->name.front(); 

又はstd::basic_string::at

h->name.at(0); 

またはインデックスのstd::basic_string::operator[]オペレータstd::basic_string::frontメンバ関数を使用し、最初の文字(参照)を得るために

+4

なぜ 'H->名前を[0 ] '? – CoryKramer

+0

@CoryKramer感謝しました。私は前にこの方法を知らなかった。 –

+0

'h-> name.data()'は、最初の文字へのポインタを提供します。 – Ctx

答えて

2

0

h->name[0]; 

またはstd::basic_string::dataポインタ間接参照:

*h->name.data(); 

またはstd::basic_string::beginイテレータ間接参照:あなたの構造体が含ま

*h->name.begin(); 

簡単な例:

#include <iostream> 
#include <string> 
struct empType{ 
    std::string name; 
    empType *next; 
}; 

int main() { 
    empType* h = new empType; 
    h->name = "Hello World"; 
    h->next = nullptr; 
    std::cout << h->name.front(); 
    std::cout << h->name.at(0); 
    std::cout << h->name[0]; 
    std::cout << *h->name.data(); 
    std::cout << *h->name.begin(); 
    delete h; 
} 
関連する問題