2016-07-08 4 views
-2

Как присвоить значение индексу строки C++ по индексу. Я пробовал этот код, но это не меняет значение строки.Как присвоить значение индексу строки C++ индексом

#include <iostream.h> 
#include <string> 

void change(string & str) 
{ 
    str[0] = '1'; 
    str[1] = '2'; 
    // str = "12" ; // it works but i want to assign value to each index separately. 
} 
void main() 
{ 
    string str; 
    change(str); 
    cout << str << endl; // expected "12" 
} 
+1

_ "Как присвоить значение A C строки индекса ++ по индексу" _ Легко: 'Обл [0] = '1'; str [1] = '2'; 'Однако перед тем вы должны убедиться, что' str [1] 'существует. –

+0

Что вы получаете вместо ожидаемого «12»? Также имейте в виду, что 'string' должен знать не только содержимое каждого элемента, но и размер. Я подозреваю, что вы печатаете пустую строку, потому что (несмотря на то, что ей присвоены значения [0] th и [1] st), ее размер по-прежнему равен 0. – mvidelgauz

+0

Вы должны '#include ' вместо 'iostream.h', и это код не компилируется, потому что вы не префикс 'string',' cout' и 'endl' с' std :: '. Кроме того, 'main()' должен возвращать 'int', а не' void' – Falmarri

ответ

8

Вы можете сделать это, но прежде, чем вы можете назначить символы по индексу, вы должны сначала изменить размер строки таким образом, что эти показатели являются действительными.

str.resize(2); 
0

Использование STL sstream для stringstreams делает его гораздо проще для добавления и создания динамических строк.

#include <iostream> 
#include <string> 
#include <sstream> 
using namespace std; 

void change(stringstream *ss, char value) { 
    *ss << value; 
} 

int main() { 
    stringstream stream; 
    stream << "test"; 

    change(&stream, 't'); 

    cout << stream.str() << endl; //Outputs 'testt' 
    return 0; 
} 
+0

appending - это не то же самое, что перечисление значения по определенному индексу – user463035818

3

Прежде всего, этот код даже не компилируется. Ошибки:

  1. <iostream.h> не является стандартным заголовком. Используйте только <header>.
  2. Используйте using namespace std; или префикс cout и endl с std::.
  3. main должен вернуть int, а не void.

Тогда размер строки по-прежнему равен нулю, поэтому это изменение неопределенного поведения str[0] и str[1].

Чтобы исправить это, установите его размер с помощью std::string::resize (size_t):

str.resize (2); 
+0

'' необходимо, хотя другие заголовки определяют 'std :: string'. Некоторая реализация (например, MSVC) не определяет _everything_ of 'std :: string' в других заголовках (например, перегрузки' ostream'), поэтому лучше включить ее, чтобы сделать ее независимой от платформы/компилятора. – Rakete1111

+0

О, спасибо за указание, что вне, исправлено;) –

+0

Спасибо, а btw он компилируется на компилятор Windows (c-free). поэтому не заметили синтаксических ошибок. –

Смежные вопросы