【发布时间】:2015-06-16 04:21:21
【问题描述】:
- 字符串是一个句子,而不仅仅是一个单词。
- 必须是递归的。
- 在这里我如何做到这一点。第一个函数改变第一个字母。第二个函数将小写字母放在其余部分。
这是我尝试过的:
void changeWord(char *str){
if (*str >= 'a' && *str <= 'z')
*str = *str - 32; //stop condition.
changeRest(str+1);
}
void changeRest(char *str){
if (*str !=0){ //STOP CONDITION.
if (*str >= 'A' && *str <= 'Z'){ //if its upper.
*str = *str +32; //change it to lower
}
changeRest(str+1); //call the new string -1.
}
return;
}
【问题讨论】:
-
为什么不是迭代解决方案? (无论如何,尾递归都会被编译成迭代代码,所以递归根本不会对性能产生任何影响,但看起来很丑:))
-
注意:不要使用
*str +32,而是使用*str - 'A' + 'a'。避免使用幻数 32。 -
它没有解决问题。我需要更正完整的句子,只有在之后。我需要输入一个大写字母。
-
您想在字符串中添加句点,还是将其最后一个字符更改为句点?
-
请澄清您的问题。您想知道如何解决单个单词的大小写问题,还是解析和纠正整个句子?您的代码示例似乎非常关注一个单词,但您对响应的反对意味着后者。
标签: c string recursion uppercase lowercase