我正在尝试在Swift中将字符串中的每个偶数占位符大写。因此[0],[2],[4],[6]中的字符全部变为大写。
我有一个声明的变量:
var str = "This is a test"
我有一个数组,将变量分解成数组:
let characters = Array(str) //Creates the array "["T", "h", "i", "s", " ", "i", "s", " ", "a", " ", "t", "e", "s", "t"]\n"
最重要的是,我正在创建一个空数组来输入新的大写/小写字母
var newCharacters = Array<Character>()
然后在0处声明索引
var index = 0 //declaring the index at 0
我试图弄清楚如何创建for循环,该循环将嗅出偶数数组项,然后大写其中的字符。
我创建了一个for循环,该循环将操作数组中偶数个占位符,我只是不知道将大写的其他字符串都大写的语法:
for letter in characters {
if index % 2 == 0 {
}
}
我试图弄清楚:将所有其他字母(数组中的偶数)大写,将它们放入新数组中,然后将其转换回字符串的语法是什么。
最终结果应该是:
"ThIs iS TeSt"
答案 0 :(得分:3)
一种方法是使用stride
:
var str = "This is a test"
var chars = Array(str).map { String($0) }
for i in stride(from: 0, to: chars.count, by: 2) {
chars[i] = chars[i].uppercased()
}
var hiphopcasedStr = chars.joined()
请注意,当您使用Unicode时,某些字符大写到多字符字符串,因此Character
的数组不太合适(因此转换为String
的数组)。
答案 1 :(得分:3)
您可以依次组合enumerated
,map
和joined
来创建结果:
let str = "This is a test"
let result = str.enumerated()
.map { $0.offset % 2 == 0 ? String($0.element).uppercased() : String($0.element) }
.joined()
print(result)
ThIs iS A TeSt
说明:
String
枚举为Character
的数组。在.enumerated()
上调用String
会使它产生一系列(offset: Int, element: Character)
元组。map
接受一个序列并创建一个数组。依次对序列中的每个元素调用map
之后的闭包,闭包返回的值将成为新数组中的下一个元素。$0
是传递给map的值的默认名称。在这种情况下,我们将传递(offset: Int, element: Character)
元组。 $0.offset
是字符在String
中的位置,而$0.element
是字符。uppercased()
的{{1}}(如果偏移量为偶数),或者仅返回String
(如果偏移量为奇数) 。Character
的结果为String
,然后使用map
将[String]
的数组重新组合为单个joined()
。答案 2 :(得分:0)
let str = "This is a test"
let result = str.indices.map {
str.distance(from: str.startIndex, to: $0) % 2 == 0 ?
str[$0...$0].uppercased() :
str[$0...$0].lowercased() }.joined()
print(result) // "ThIs iS A TeSt\n"
或作为StringProtocol上的一种变异方法:
extension StringProtocol where Self: RangeReplaceableCollection {
mutating func capitalizeEveryOther() {
indices.forEach {
replaceSubrange($0...$0, with:
distance(from: startIndex, to: $0) % 2 == 0 ?
self[$0...$0].uppercased() :
self[$0...$0].lowercased() )
}
}
var capitalizingEveryOther: Self {
var result = self
result.capitalizeEveryOther()
return result
}
}
var str5 = "This is a test"
str5.capitalizeEveryOther()
print(str5) // ThIs iS A TeSt
答案 3 :(得分:0)
尝试此代码
int main(int argc, const char * argv[]) {
char filepath[1000];
printf("Enter the filepath of the Bakefile or bakefile: ");
scanf("%s" , filepath);
FILE* spData = fopen(filepath , "r");
if (spData == NULL) {
printf ("Cannot open file.");
exit(EXIT_FAILURE);
}
replaceVariables(spData);
fclose(spData);
return 0;
}
结果
这是一个测试