宿題だか課題だか知らないが、文字列変換問題ですな。
・大文字は小文字に、数字は'0','1','2'...を'9','8','7'...と反転させる。
・ただし、'#'以降の文字は変換しない。
・例として "Abc012_59F_#012Gh"を渡した場合の戻り値は "abc987_40f_#012Gh"となる。
ちょーしぶっこいてラムダ使って解いてみるなり。
#include <iostream>
#include <string>
#include <algorithm>
int main() {
std::string str = "Abc012_59F_#012Gh";
std::cout << '[' << str << ']' << std::endl;
std::transform(
str.begin(),
std::find(str.begin(),str.end(), '#'),
str.begin(),
[](char x) -> char {
if ( x >= '0' && x <= '9' ) return '9' - x + '0';
if ( x >= 'A' && x <= 'Z' ) return x - 'A' + 'a';
return x;
}
);
std::cout << '[' << str << ']' << std::endl;
}
|