在字符串的偶数位置提取字母?

时间:2018-11-09 16:18:19

标签: c++ string for-loop

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 :(得分:3)

问题:
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;
}

答案 1 :(得分:1)

您的代码不会在for下运行该块,因为该行的末尾有一个;。这意味着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;
}

答案 2 :(得分:1)

- name: Create users
  user:
    name: "{{ item.username }}"
    comment: "{{ item.comment | default('User {{item.username}}') }}"
    password: "{{ item.password | default('!') }}"
    state: "{{ item.state | default('present') }}"
    shell: "{{ item.shell | default('/bin/bash') }}"
    group: "{{ item.group | default('users') }}"
  with_items: '{{ users }}'
  when: item.username is defined and ((item.admin is defined and item.admin == True) or (item.hosts is defined and item.hosts.user is defined and inventory_hostname in item.hosts.user)

输出:assets = Asset.some_scope.some_other_scope devices = Device.where("devices.asset_id IN (?)", assets.select(:id)) devices.update_all("devices.my_field=?", 6)

答案 3 :(得分:0)

您可以使用类似这样的内容:

for(int i = 0; i < scrambleword.length(); i+=2){
        output += scrambleword.at(i);
}