gpt4 book ai didi

c++ - 如何在迭代字符串时使用 "skip"空格

转载 作者:行者123 更新时间:2023-12-02 01:48:27 25 4
gpt4 key购买 nike

你好,菜鸟问题在这里。我正在学习字符串,目前正在编写一个程序,该程序接受一个字符串并交替大写,第一个字母以小写开头。我遇到的问题是,如果字符串有空格,就会弄乱交替模式。我想知道是否有办法跳过空格或忽略它们?这是我到目前为止所拥有的。

#include<string>
#include <iostream>

std::string convertToAltCaps(std::string str) {

for (int i = 0; i < str.length(); i++) {

if (str[i] >= 'A' && str[i] <= 'Z' || str[i] >= 'a' && str[i] <= 'z') {

if (i % 2 != 0) {
str[i]= toupper(str[i]);
}
else {
str[i]=tolower(str[i]);
}
}


}
return str;
}

最佳答案

正如您所注意到的,余数 if (i % 2 != 0) 检查将无法很好地完成此任务,因为它应该在每次新词开始。

一种方法可能是保留一个 bool 以便何时翻转为小写或大写。每当遇到空格时,您都会重置该 bool

示例:

std::string convertToAltCaps(std::string str) {
bool lower = true;

for (char& ch : str) { // range-based for loop
// use unsigned char with cctype functions:
auto uch = static_cast<unsigned char>(ch);

if (std::isalpha(uch)) { // a-z and A-Z (in "C" locale)
if (lower)
ch = std::tolower(uch);
else
ch = std::toupper(uch);
lower = !lower; // toggle

} else if (std::isspace(uch)) {
lower = true; // next alphabetic should be lower
}
}
return str;
}

Demo

关于c++ - 如何在迭代字符串时使用 "skip"空格,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/70628259/

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