Ich möchte nur meine neu zugewiesene Zeichenfolge die gleiche Länge wie die zuvor zugewiesene Const-Zeichenfolge haben, dann füllen Sie mit anderen Werten.
Ein Teil des Grundes der string
Klasse/Typ existiert, ist, so dass Sie keine Sorge um den Versuch, seine Länge zu verwalten. (Das Problem mit Arrays von char
.)
Wenn Sie eine const std::string tmp
haben, dann können Sie nichts zuweisen, nachdem es bereits initialisiert wurde. Z.B .:
const std::string tmp = "A value"; // initialization
tmp = "Another value"; // compile error
Wie würden Sie empfehlen ich anmutig diese und sicher?
Wenn Sie auf eine bestimmte Größe wirklich Strings behalten möchten, unabhängig von ihrem Inhalt, man konnte immer resize
Ihre string
Variablen. Zum Beispiel:
// 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);
jetzt Ihre word
String eine Länge/Größe der MAX_STRING_LENGTH
haben und etwas über das Ende abgeschnitten wird.
Dieses Beispiel stammt aus C++ Reference
// 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
können Sie nicht nur einen String fragen Variable für seine Länge zur Compile-Zeit. Per Definition ist es unmöglich, den Wert einer Variablen oder Zustand eines gegebenen Programms für diese Angelegenheit zu kennen, während es nicht ausgeführt wird. Diese Frage ist nur zur Laufzeit sinnvoll.
Andere haben dies erwähnt, aber es scheint ein Problem mit Ihrem Verständnis von string letters[12];
zu sein. Das gibt Ihnen ein Array von string
Typen, d. H. Sie erhalten Platz für 12 vollständige Zeichenfolgen (z. B. Wörter/Sätze/usw.), nicht nur Buchstaben.
Mit anderen Worten, könnten Sie tun:
for(size_t i = 0; i < letters.size(); ++i)
letters[i] = "Hello, world!";
So Ihre letters
Variable sollte genauer (z words
) etwas umbenannt werden.
Wenn Sie wirklich wollen Buchstaben (zB das vollständige Alphabet auf einem einzelnen String), können Sie so etwas tun könnte:
// 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];
// ...
Es hängt alles davon ab, was Sie tun müssen, aber dies könnte eine gute sein Alternative.
Haftungsausschluss: Beachten Sie, dass es nicht wirklich meine Empfehlung ist, dass Sie dies tun. Sie sollten string
s verwalten ihre eigene Länge. Wenn beispielsweise der Wert string
tatsächlich kürzer als Ihr Limit ist, verursachen Sie, dass Ihre Variable mehr Speicherplatz/Speicher als benötigt benötigt. Wenn sie länger ist, wird sie immer noch abgeschnitten. Keine der Nebenwirkungen ist gut, IMHO.
'Zeichenfolge Buchstaben [12]', bedeutet nicht eine Zeichenfolge der Länge 12. Es ist ein Array mit 12 Zeichenfolgen. –
s = straddup (vorhanden); wird eine Zeichenkette duplizieren, die mit freien (s) gelöscht werden kann; –
Dank Vaughn, diese Unterscheidung ist entscheidend und ich hatte es nicht gesehen. Ich dachte an String als Char-Array. –