[英]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
應用於每個塊f
是drop(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.