c ++ вставьте значение и напечатайте строку

Я объявляю 2 строки строкового типа, которые s, s1. Я использую строку с ‘Cin’
и я вставляю 3 значения в s1. Затем я печатаю cout, но он не может печатать строку.

Вот мой код

#include<iostream>
#include<cstdio>
using namespace std;

int main()

{

string s,s1;
cin>>s;
s1[0]=s[1];
s1[1]=s[2];
s1[2]=s[3];
s1[3]='\0';
cout<<s1<<endl;
return 0;
}

с1 не было пусто …. cout<<s1[0]<<s1[1]<<s1[2] и посмотреть.
Почему s1 не может печатать?

-2

Решение

Вероятно, самый простой способ выполнить задачу OP — это использовать библиотечную функцию, такую ​​как зиЬзЬг () которая заботится обо всех деталях, в которых отсутствует опубликованный код (и уже указано):

  • управление памятью. Вторая строка s1 пусто, поэтому попытка записать свои первые четыре (нераспределенных) элемента является неопределенным поведением. В общем, s1 следует изменить размер до необходимой длины.

  • нулевой терминатор. std::string может управлять своим внутренним представлением и всегда возвращает строку с нулевым символом в конце через свои функции-члены c_str а также данные (начиная с C ++ 11).

Вот как это можно сделать:

#include <iostream>
#include <string>

int main()
{
std::string s;

std::cin >> s;

std::string s1;
std::string::size_type start_pos = 1,
count = 3;
if ( s.size() > start_pos )
s1 = s.substr(start_pos, count);

std::cout << s1 << '\n';
}
1

Другие решения

s1 не имеет никаких символов Вы пытаетесь изменить значение символов, которые не существуют.

Ваша программа имеет неопределенное поведение и может так же легко открыть зоопарк ламы, изменить полярность магнитного поля Земли или решить проблему холодного синтеза в ванне.

  1. Делать s1 правильный размер, прежде чем что-то писать;
  2. Не пишите '\0' к концу; это не строка C; в этом нет необходимости. Строки C ++ заботятся о себе.

Вот пример:

#include <iostream>
#include <cassert>

int main()
{
std::string s, s1;
std::cin >> s;

assert(s.size() >= 4);
s1.resize(3);

s1[0] = s[1];
s1[1] = s[2];
s1[2] = s[3];

std::cout << s1 << std::endl;
}

живое демо

0

Вы не можете назначить как s1 [0] = s [1]

Правильным способом является использование функции назначить как:

string s,s1;
cin>>s;
s1.assign(s.begin()+1,s.begin()+4);
cout<<s1<<endl;
0

Назначение строки не может быть выполнено путем назначения индексов без фиксирования или определения размера строки. Это может вызвать ошибку строкового индекса. Если вы хотите сделать это, я думаю, что конкатенация строк — лучший метод; то есть путем добавления подстрок или строковых индексов в строку. Ниже приведен код, который использует метод конкатенации строк.

#include<iostream>
#include<cstdio>
#include<string>
using namespace std;
int main()
{
string s,s1="";
cin>>s;
s1= s1 + s[1];
s1= s1 + s[2];
s1= s1 + s[3];
cout<<s1<<endl;
return 0;
}
0
По вопросам рекламы [email protected]