gpt4 book ai didi

c++ - 如何制作递归函数,它需要检查给定字符串中当前字母及其旁边的字母是小写还是大写?

转载 作者:行者123 更新时间:2023-11-28 05:21:10 26 4
gpt4 key购买 nike

它应该像这样转换一个字符串:例如:HEloOO,应该转换成:heLOoo。出于某种原因,它不起作用,它只是不会将字母从大写转换为小写,反之亦然任何帮助将不胜感激?

#include <stdio.h>
#include <string.h>
#include <ctype.h>

void rek(char array[], int d)
{
int counter=0;

if(d==0)
{
printf("%s \n",array);
printf("%d \n",counter);
}
else
{
if((array[d]>='A' && array[d]<='Z')&&(array[d-1]>='A' && array[d-1]<='Z'))
{
array[d]=array[d]+32;
array[d-1]=array[d-1]+32;
counter++;
rek(array,d-2);
}
if((array[d]>='a' && array[d]<='z')&&(array[d-1]>='a' && array[d-1]<='z'))
{
array[d]=array[d]-32;
array[d-1]=array[d-1]-32;
counter++;
rek(array,d-2);
}
}
}

int main()
{
char array[100];
int d;

gets(array);
d=strlen(array);

rek(array,d);

return 0;
}

最佳答案

当两个相邻字符的大小写不同时,您的函数不会调用自身。当字符串从头开始或从尾部处理时,您也会得到不同的结果。

我会这样写函数

#include <stdio.h>
#include <ctype.h>

char * rek(char *s)
{
if (s[0] && s[1])
{
size_t i = 1;
if (islower((unsigned char)s[0]) && islower((unsigned char)s[1]))
{
s[0] = toupper((unsigned char)s[0]);
s[1] = toupper((unsigned char)s[1]);
++i;
}
else if (isupper((unsigned char)s[0]) && isupper((unsigned char)s[1]))
{
s[0] = tolower((unsigned char)s[0]);
s[1] = tolower((unsigned char)s[1]);
++i;
}

rek(s + i);
}

return s;
}

int main( void )
{
char s[] = "HEloOO";

puts(rek(s));

return 0;
}

程序输出为

heLOoo

关于c++ - 如何制作递归函数,它需要检查给定字符串中当前字母及其旁边的字母是小写还是大写?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41474602/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com