私は使用しています:
string letters = THESAMELENGTH; // Assign for allocation purposes.
理由は、私が:
string letters[THESAMELENGTH.length()];
一定ではない表現の苦情があります。
しかし、私が:
string letters[12];
guide const stringのサイズが変更された場合、すべてのインスタンスを変更する必要があるリスクがあります。
しかし、これらのエントリを使用しないときに文字列を割り当てるのはばかげているようです。新しく割り当てた文字列を以前に割り当てたconst文字列と同じ長さにしてから、異なる値を入力するだけです。
私がこれを優雅にそして安全に行うことをどのように勧めますか?
新しく割り当てられた文字列を以前に割り当てられたconst文字列と同じ長さにしてから、異なる値を入力するだけです。
string
クラス/タイプが存在する理由の一部は、その長さを管理しようとすることを心配する必要がないためです。(の配列の問題char
。)
を持っている場合は、const std::string tmp
すでに初期化された後で何も割り当てることはできません。例えば:
const std::string tmp = "A value"; // initialization
tmp = "Another value"; // compile error
私がこれを優雅にそして安全に行うことをどのように勧めますか?
あなたが本当に特定のサイズに文字列を保持したい場合は、関係なく、その内容の、あなたは常に可能性resize
あなたのstring
変数。例えば:
// in some constants.h file
const int MAX_STRING_LENGTH = 16;
// in other files
#include "constants.h"
// ...
std::string word = ... // some unknown string
word.resize(MAX_STRING_LENGTH);
これで、word
文字列の長さ/サイズがにMAX_STRING_LENGTH
なり、末尾を超えるものはすべて切り捨てられます。
この例はC ++リファレンスからのものです
// resizing string
#include <iostream>
#include <string>
int main ()
{
std::string str ("I like to code in C");
std::cout << str << '\n';
unsigned sz = str.size();
str.resize (sz+2,'+');
std::cout << str << '\n';
str.resize (14);
std::cout << str << '\n';
return 0;
}
// program output
I like to code in C
I like to code in C++
I like to code
コンパイル時に文字列変数の長さを尋ねることはできません。定義上、実行されていない間は、変数の値、または特定のプログラムの状態を知ることは不可能です。この質問は、実行時にのみ意味があります。
他の人もこれについて言及していますが、あなたの理解に問題があるようですstring letters[12];
。これにより、string
タイプの配列が得られます。つまり、文字だけでなく、12個の完全な文字列(単語/文など)用のスペースが得られます。
言い換えれば、次のことができます。
for(size_t i = 0; i < letters.size(); ++i)
letters[i] = "Hello, world!";
したがって、letters
変数の名前をより正確なものに変更する必要があります(例words
)。
本当に文字が必要な場合(たとえば、単一の文字列の完全なアルファベット)、次のようなことができます。
// constants.h
const std::string ALPHABET_LC = "abc...z";
const std::string ALPHABET_UC = "ABC...Z";
const int LETTER_A = 0;
const int LETTER_B = 1;
// ...
// main.cpp, etc.
char a = ALPHABET_LC[LETTER_A];
char B = ALPHABET_UC[LETTER_B];
// ...
それはすべてあなたが何をする必要があるかに依存しますが、これは良い選択肢かもしれません。
免責事項:これを行うことは実際には私の推奨事項ではないことに注意してください。string
sに自分の長さを管理させる必要があります。たとえば、string
値が実際に制限よりも短い場合は、変数が必要以上のスペース/メモリを使用していることになり、それよりも長い場合でも、値は切り捨てられます。どちらの副作用も良くありません、私見。
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加