|
本帖最后由 Are0s 于 2022-4-15 11:23 编辑
对于参数输入true功能正常,输入false为什么全都是大写,找了半天语法感觉也也没问题,百思不得其解
#include <iostream>
#include <string>
using namespace std;
/*功能为对字符串指定位置的字符变换为大写。
str 参数为字符串的指针;
str_len 为字符串的长度;
b_odd_pos 为true的时候,就要将 str 字符串中的奇数位置的字符变为大写,同时将非奇数位置的字符变为小写;
b_odd_pos 为false的时候,就要将 str 字符串中的奇数位置的字符变为小写,同时将非奇数位置的字符变为大写;
奇数指的是:1, 3, 5, 7, 9, 11, 13, 15, 17, 19...以此类推*/
bool string_upper_diy(char str[], int str_len, bool b_odd_pos=true)
{
for (int i = 0; i < str_len; i++)
{
if (b_odd_pos)//输入为true
{
if (((i + 1) % 2 != 0) && str >= 'a'&&str <= 'z')
{//是奇数位且小写
str -= 32;//改成大写,是大写没必要改
}
else
{
if (str >= 'A'&&str <= 'Z')//偶数位且为大写
{
str += 32;//改成小写
}
}
}
else
{
if (((i + 1) % 2 != 0) && str >= 'A'&&str <= 'Z')
{//是奇数位且大写
str += 32;//改成小写,是小写没必要改
}
else
{
if (str >= 'a'&&str <= 'z')//非奇数位且为小写
{
str -= 32;//改成大写
}
}
}
}
return true;
}
int main()
{
char test1[50] = "asjgduy";
string_upper_diy(test1, strlen(test1), false);
cout << test1 << endl;
return 0;
}
本帖最后由 yoobaby 于 2022-4-14 17:06 编辑
if (((i + 1) % 2 != 0) && str >= 'A'&&str <= 'Z') //这句你如果传入的是小写,那就永远不会成立,怎么可能改。
{//是奇数位且小写
str += 32;//改成大写,是大写没必要改
}
你这判断得字母是大写,才改成小写。。你逻辑自己搞错了。+32是改成小字。
你应该是大小写的数值搞混乱了。。
- if (((i + 1) % 2 != 0) )
- {
- //奇位,大写就改成小写
- if (str[i] >= 'A' && str[i] <= 'Z')
- {
- str[i] += 32;//改成小写
- }
- }
- else
- {
- //非奇数位且是小写,就改成大写
- if (str[i] >= 'a' && str[i] <= 'z')
- {
- str[i] -= 32;//改成大写
- }
- }
复制代码
|
上一篇: MFC,有没有办法往网页中的编辑框写入一串字符下一篇: MFC如何调用dll内返回值是数组的函数
|