"olleH ym dneirf",这里多余的空格不会丢失。-6ren">
gpt4 book ai didi

c++ - 反转由空格分隔的字符串的元素返回比原始字符串更大的字符串

转载 作者:行者123 更新时间:2023-11-30 02:14:12 24 4
gpt4 key购买 nike

在 CodeWars 上用 C++ 玩得很开心,试图反转字符串中单词的字母,单词由空格分隔,即。 "Hello my friend"--> "olleH ym dneirf",这里多余的空格不会丢失。

我的答案未通过测试,但是当我比较我的答案和建议的答案时,没有输出。我还尝试检查原始字符串和反转字符串的长度,根据字符串的不同,它们的长度存在显着差异。但是,当我比较输出时,它们的长度再次相同,并且没有尾随空格。

int main() {

std::string s("The quick brown fox jumps over the lazy dog.");

std::cout <<"Old: "<<s<<std::endl;
std::cout <<"New: "<<reverse(s)<<std::endl;

//lengths are not the same
std::cout <<"Length of s: "<<s.length()<<std::endl;
std::cout <<"Length of reverse(s): "<<reverse(s).length()<<std::endl;

//check for trailing whitespace
std::cout <<"Last 5 chars of reverse(s): "<<reverse(s).substr(reverse(s).length() - 6)<<std::endl;
}
std::string reverse(std::string str) {

std::string word;
std::string revWord;
std::string result;
char space(' ');

int cursor = 0;
for(int i = 0; i < str.length(); i++){
std::string revWord;
if (str[i] == space || i == str.length() - 1){
if (i == str.length() - 1)
i++;
word = str.substr(cursor, i - cursor);
for(int j = word.length(); j >= 0; j--){
revWord.push_back(word[j]);
}
word = revWord;
if(i != str.length() - 1)
result.append(word + " ");
cursor = i+1;
}
}

return result;
}

控制台输出:

Old: The quick brown fox jumps over the lazy dog.
New: ehT kciuq nworb xof spmuj revo eht yzal .god
Length of s: 44
Length of reverse(s): 54
Last 5 chars of reverse(s): .god

有什么想法吗?

最佳答案

由于您试图访问字符串的末尾,因此您可能会在字符串中以不可打印的“字符”结尾。

for(int j = word.length(); j >= 0; j--){
revWord.push_back(word[j]);
}

这里你设置了一个等于字长的变量,然后这个变量用来读取字符串末尾后的一个字节。这里存储的数据是一个 NUL 字节,这样 std::string 就可以用来生成匹配的 C 风格字符串,而无需复制其数据。

我相信您还会在字符串末尾添加一个空格,再添加一个额外的字符。

关于c++ - 反转由空格分隔的字符串的元素返回比原始字符串更大的字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58310570/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com