如何在迭代字符串时"skip"空格



你好,这里没有问题。我正在学习字符串,目前正在编写一个程序,该程序使用字符串并用小写字母开头的第一个字母替换大写字母。我遇到的问题是,如果字符串有空格,就会打乱交替模式。我想知道是否有办法跳过空格或忽略它们?这就是我目前所掌握的。

#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;
}

演示

最新更新