В вашем if
вы сравниваете значение текущего индекса (внутри l oop) с размером строки. Это две несвязанные вещи.
Кроме того, вы используете al oop, хотя вы хотите что-то делать только с одним ранее известным индексом.
for (string::size_type i = 0; i < sInput.size(); i++)
{
if (sInput[i] == sInput.size())
{
sInput[0] = sInput[sInput.size()];
}
}
Вы можете изменить условие if
, например: это для достижения вашей цели:
if (i == sInput.size()-1) /* size as the index is one too high to be legal */
Но то, что достаточно и более элегантно, это сбросить if
и l oop. полностью
/* no loop for (string::size_type i = 0; i < sInput.size(); i++)
{ */
/* no if (sInput[i] == sInput.size())
{*/
sInput[0] = sInput[sInput.size()-1]; /* fix the index*/
/* }
} */
Т.е.
sInput[0] = sInput[sInput.size()-1]; /* fix the index*/
То же самое для вывода, хотя там вы уже получили правильный индекс.
Это не предназначено для решения задачи, которая Вы связались извне,
, если вы хотите, чтобы вам было необходимо полностью и непосредственно описать проблему здесь.
Т.е. это только исправляет ваш код, в соответствии с описанием, которое вы приводите здесь в тексте вашего вопроса,
" поставить последнюю букву в начале строки ".
Она не" переключается "или меняет местами первую и последнюю. Если вы хотите этого, пожалуйста, найдите код, который вы недавно написали (конечно, во время ваших поисков обучения программированию), который меняет значение двух переменных. Адаптируйте этот код к двум индексам (первый и последний, 0 и размер-1), и он произведет замену.
Так много для циклов и ifs, но в вашем коде больше неправильного.
Это
return sInput, sOutput;
не делает то, что вы ожидаете. Читайте об операторе ,
, запятом.
Его результатом является второе из двух выражений, а первое оценивается только для побочных эффектов.
Это означает, что
cout << "Result: " << same_necklace(sName , sExpectedOutput) << endl;
будет выводить только измененный sExpectedOutput
.
Если вы хотите вывести и измененный вход, и модифицированный выход, тогда вы можете просто
cout << "Result: " << sName << " " << sExpectedOutput << endl;
, поскольку оба были заданы как ссылка на функцию и, следовательно, обе содержат изменения, внесенные функцией.
Это также может не отвечать на вызов, но оно объясняет ваши недоразумения, и вы сможете адаптироваться к вызову сейчас.