作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
你好,菜鸟问题在这里。我正在学习字符串,目前正在编写一个程序,该程序接受一个字符串并交替大写,第一个字母以小写开头。我遇到的问题是,如果字符串有空格,就会弄乱交替模式。我想知道是否有办法跳过空格或忽略它们?这是我到目前为止所拥有的。
#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;
}
关于c++ - 如何在迭代字符串时使用 "skip"空格,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/70628259/
我是一名优秀的程序员,十分优秀!