извлечение букв на четных позициях в строках?

string extract(string scrambeledword){

unsigned int index;
string output;
string input= " ";

for (index=0; index <= scrambeledword.length() ; index++);
{
if (index%2==0)
{
output+=input ;
cout << output;

}}

return output;}

Я хочу извлечь индексированные буквы с четными номерами из 40-буквенного слова, введенного пользователями. Имеет ли это смысл? я еще не взял массивы и не хочу их включать.

1

Решение

Проблемы:
1. У вас есть ; после вашего for цикл, тело цикла никогда не запускается.
2. <= здесь неправильно, так как scrambeledword.length () находится вне диапазона. использование != или же < вместо.
3. Вам нужно либо назначить что-то input перед добавлением его в выходной файл или вообще избавиться от него.
4. Как отметил @Aconcagua, стоит отметить, что я удалил ваше заявление о index из области действия функции и добавил его только к for объем цикла. Если вы также подумаете об этом, компилятор выдаст ошибку (так как она не будет объявлена ​​вне области действия for) и вы бы заметили о ; проблема.

Фиксированная версия:

string extract(const string &scrambeledword){ // copying strings is expensive

// unsigned int index;   // obsolete
string output;
// string input= " ";    // obsolete

for (size_t index = 0; index != scrambeledword.length(); ++index) // `<=` would be wrong since scrambeledword.length() is out of range
{
if (index % 2 == 0)
{
output += scrambeledword[index];
// cout << output; // obsolete. If you just want the characters, print scrambeledword[index]
cout << scrambeledword[index];
}
}
cout << endl; // break the line for better readability
return output;
}
3

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

Ваш код не будет запускать блок под for, потому что есть ; в конце строки. Это означает, что работает без блока. В основном это будет рассчитывать на длину данного слова.

В течение index <= scrambeledword.length() может вызвать исключение вне границы, потому что вы можете индексировать из массива строк. использование index < scrambeledword.length() вместо.

Это может быть хорошим решением проблемы:

string extract(const string& scrambeledword)
{
string output;

for (unsigned int index = 0; index < scrambeledword.length(); index++)
{
if (index % 2 == 0)
{
output += scrambeledword[index];
}
}

return output;
}
1

auto str = "HelloWorld"s;
int  i   = 0;
for_each(str.cbegin(), str.cend(), [&i](char const & c) { if (i++ % 2 == 0) cout << c; });

выход: Hlool

1

Вы могли бы пойти с чем-то вроде этого:

for(int i = 0; i < scrambleword.length(); i+=2){
output += scrambleword.at(i);
}
0
По вопросам рекламы ammmcru@yandex.ru
Adblock
detector