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. У вас есть ;
после вашего 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;
}
Ваш код не будет запускать блок под 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;
}
auto str = "HelloWorld"s;
int i = 0;
for_each(str.cbegin(), str.cend(), [&i](char const & c) { if (i++ % 2 == 0) cout << c; });
выход: Hlool
Вы могли бы пойти с чем-то вроде этого:
for(int i = 0; i < scrambleword.length(); i+=2){
output += scrambleword.at(i);
}