извлечение букв на четных позициях в строках? - PullRequest
0 голосов
/ 09 ноября 2018
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-буквенного слова, введенного пользователями. Имеет ли это смысл? я еще не взял массивы и не хочу их включать.

Ответы [ 4 ]

0 голосов
/ 09 ноября 2018
auto str = "HelloWorld"s;
int  i   = 0;
for_each(str.cbegin(), str.cend(), [&i](char const & c) { if (i++ % 2 == 0) cout << c; });

вывод: Hlool

0 голосов
/ 09 ноября 2018

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

В 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;
}
0 голосов
/ 09 ноября 2018

Проблемы:
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;
}
0 голосов
/ 09 ноября 2018

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

for(int i = 0; i < scrambleword.length(); i+=2){
        output += scrambleword.at(i);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...