簡體   English   中英

C++ 提取字符串中奇數位置的每個字符並返回偶數

[英]C++ extract each character in string at odd positions and return the even

我需要創建一個代碼來提取奇數位置並返回偶數位置,所以對於這個代碼,我需要它返回“bd”任何人都可以指出我正確的方向來修復這個代碼,所以它給了我 output i需要? 請注意主function不能改

string myFunction1(string str) {
    string result = "";                       
    for(int i=1; i<str.length();i+=2) {
        result += str[i]; 
    }
    return result;
}

    int main(){
    assert(myFunction1("abcde").compare("bd") == 0);
}

使用Range-v3

#include <iostream>
#include <range/v3/range/conversion.hpp>
#include <range/v3/view/chunk.hpp>
#include <range/v3/view/transform.hpp>
#include <range/v3/view/drop.hpp>
#include <range/v3/view/join.hpp>
#include <string>

using ranges::to;
using namespace ranges::views;

std::string myFunction1(std::string str) {
    return str                 // "abcde", which is [a, b, c, d, e]
         | chunk(2)            // [[a,b], [c,d], [e]]
         | transform(drop(1))  // [[b], [d], []]
         | join                // [b, d]
         | to<std::string>;    // "bd"
}

int main () {
    assert(myFunction1("abcde").compare("bd") == 0);
}
  • 語法x | f(y) x | f(y)表示f(x, y)
  • s ,字符串,可以看作是字母的“范圍”;
  • chunk(2)將輸入范圍分成 2 個塊(如果原始字符串為奇數個字符,則最后一個塊有一個元素)
  • transform(f)f應用於每個塊
  • 但是fdrop(1) ,它刪除每個塊的第一個元素/字母,只留下第二個元素/字母,從而導致 singleton 范圍的范圍(如果原始字符串為奇數個字符,則最后一個可以為空)
  • join將單個或空范圍連接到一個范圍內。

這是一個由現有的和經過良好測試的抽象組成的解決方案,而不是混亂的低級細節。 理解和學習編寫這樣的代碼會有所收獲。

我注意到.length()有時會導致錯誤,請嘗試使用.size()代替。 順便說一句,你的代碼很好,它應該可以工作。 無論如何,請嘗試在main中調用 function 看看有什么問題。

此外,您可以將循環 go 從 1 變為str.size()並檢查if(i%2)然后result += str[i]

我認為最好把return 0; main的末尾也是如此。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM