c语言互换大小写字符字符

函数change(char*s)作用将参数字符串s中的大小写字符互换,其他字符不变,并返回s中英文字符的个数。需要代码及结果截图

#include <stdio.h>
#include <stdlib.h>
int change(char *s)
{
    int count = 0,i=0;
    while(s[i] != '\0')
    {
        if(s[i]>='a' && s[i]<='z')
        {
            s[i] -= 32;
            count++;
        }
        else if(s[i]>='A' && s[i]<='Z')
        {
            s[i] += 32;
            count++;
        }
        i++;
    }
    return count;
}
int main()
{
    char s[1000];
    int count = 0;
    gets(s);
    count = change(s);
    printf("%s\n",s);
    printf("英文字符个数:%d\n",count);
    system("pause");
}

img

参考GPT和自己的思路:以下是一个简单的C函数change,可以实现将参数字符串中的大小写字符互换,其他字符不变,并返回英文字符的个数:

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

int change(char *s) {
    int count = 0;
    char *p = s;
    while (*p != '\0') {
        if (isalpha(*p)) {
            *p = islower(*p) ? toupper(*p) : tolower(*p);
            count++;
        }
        p++;
    }
    return count;
}

int main() {
    char str[] = "Hello World!";
    printf("Original string: %s\n", str);
    int count = change(str);
    printf("Changed string: %s\n", str);
    printf("Number of English characters: %d\n", count);
    return 0;
}


函数change中,我们使用了C标准库中的isalpha函数判断字符是否为英文字母,使用了toupper和tolower函数来互换大小写字母。函数返回值为英文字母的个数,遍历字符串时,我们使用了指针来遍历字符串中的每个字符。在主函数中,我们将字符串传递给change函数,并打印出原始字符串、修改后的字符串以及英文字母的数量。
运行结果:

img

该回答引用GPT:

int change(char *s)
{
    int count = 0;
    while(*s != '\0')
    {
        if(*s >= 'A' && *s <= 'Z')
        {
            *s = *s + 32;
            count++;
        }
        else if(*s >= 'a' && *s <= 'z')
        {
            *s = *s - 32;
            count++;
        }
        s++;
    }
    return count;
}

change函数的作用是将参数字符串s中的大小写字符互换,其他字符不变,并返回s中英文字符的个数。
如还有疑问,可以私信帮助解决。

参考GPT和自己的思路,以下是使用C语言实现互换大小写字符并计算英文字符个数的代码:

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

int change(char *s) {
    int count = 0;
    while (*s) {
        if (isalpha(*s)) { // 判断是否为字母
            if (isupper(*s)) { // 如果是大写字母
                *s = tolower(*s); // 转换为小写字母
            } else { // 如果是小写字母
                *s = toupper(*s); // 转换为大写字母
            }
            count++; // 统计英文字母个数
        }
        s++; // 指向下一个字符
    }
    return count;
}

int main() {
    char s[] = "Hello, World!"; // 测试字符串
    int count = change(s);
    printf("After change: %s\n", s); // 输出转换后的字符串
    printf("Number of English characters: %d\n", count); // 输出英文字母个数
    return 0;
}

输出结果:

After change: hELLO, wORLD!
Number of English characters: 10

在上面的代码中,我们首先定义了一个名为change的函数,它接收一个指向字符数组的指针,并返回英文字符的个数。在该函数中,我们使用while循环遍历字符串中的每个字符,使用isalpha函数判断字符是否为字母,如果是,则使用isupper函数判断是否为大写字母,如果是,则使用toupper函数将其转换为小写字母,否则,使用tolower函数将其转换为大写字母。最后,我们使用count变量统计英文字母的个数,并在函数末尾返回它。

在main函数中,我们首先定义一个测试字符串s,并将其传递给change函数。然后,我们输出转换后的字符串和英文字母的个数。

谢谢邀请,算法思路:
挨个遍历字符串,小写的字符【'a',‘z’】,大写的【‘A’,‘Z’】,英文字母就落在这2个闭合区间, 大小写互换不复杂,小写转大写,减去32个字母,大写转小写加32个字母即可


#include <stdio.h>
#include <stdlib.h>
int change(char* s)
{
    int count = 0, i = 0;

    if (s == NULL) {
        return 0;
    }

    while (s[i] != '\0')
    {
        if (s[i] >= 'a' && s[i] <= 'z')
        {
            s[i] -= 32;
            ++count;
        }
        else if (s[i] >= 'A' && s[i] <= 'Z')
        {
            s[i] += 32;
            ++count;
        }
        i++;
    }
    return count;
} 

int main(int argc, char* argv[])
{ 
    char str[1024]; 
    scanf("%s",str); 
    printf("英文字符个数:%d\n", change(str));
    printf("change调用之后结果:%s\n", str);
    return 0;
}

img

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

int change(char* s) {
    int count = 0;  // to count the number of English characters
    
    while (*s != '\0') {
        if (isalpha(*s)) {  // check if the character is English alphabetic
            if (islower(*s)) {
                *s = toupper(*s);  // convert lowercase to uppercase
            }
            else {
                *s = tolower(*s);  // convert uppercase to lowercase
            }
            count++;  // increment the counter for English characters
        }
        s++;  // move to the next character in the string
    }
    
    return count;
}

int main() {
    char s[] = "HeLLo, wOrLd!";
    int count = change(s);
    
    printf("New string: %s\n", s);
    printf("Number of English characters: %d\n", count);
    
    return 0;
}


img

以下答案由GPT-3.5大模型与博主波罗歌共同编写:
以下是函数change的C语言代码及注释解释:

#include <stdio.h>
#include <ctype.h> // ctype.h头文件中包含了各种字符处理函数

int change(char *s) {
    int cnt = 0; // 记录英文字符的个数
    while (*s) {
        if (isalpha(*s)) { // 判断字符是否为英文字母
            cnt++; // 如果是,计数器加1
            if (*s >= 'a' && *s <= 'z') {
                // 如果是小写字母,将其变成大写字母
                *s = toupper(*s);
            } else {
                // 如果是大写字母,将其变成小写字母
                *s = tolower(*s);
            }
        }
        s++; // 指向下一个字符
    }
    return cnt; // 返回英文字符的个数
}

int main() {
    char s[] = "Hello, World!";
    printf("原字符串:%s\n", s);
    int cnt = change(s);
    printf("新字符串:%s\n", s);
    printf("英文字符个数:%d\n", cnt);
    return 0;
}

运行结果如下图所示:

![运行结果截图](https://i/

思路:只需要知道大小写字母的ASCII值相差多少(对照ASCII表),按照规律进行加减即可。
小写字母比大写字母大32,接收传输的字符串,依次取出-32在输出字符即可。



```c++
#include <stdio.h>
#include <ctype.h>  // 包含toupper()和tolower()函数

int change(char *s)
{
    int count = 0;
    while (*s != '\0')  // 只要不是字符串结束符
    {
        if (isalpha(*s))  // 如果是英文字母
        {
            if (islower(*s))  // 如果是小写字母
            {
                *s = toupper(*s);  // 转换为大写字母
            }
            else  // 如果是大写字母
            {
                *s = tolower(*s);  // 转换为小写字母
            }
            count++;  // 统计英文字母的数量
        }
        s++;  // 指针移动到下一个字符
    }
    return count;  // 返回英文字母的数量
}

int main()
{
    char str[100];
    printf("请输入一个字符串:");
    gets(str);  // 注意:gets()函数不安全,最好使用fgets()代替
    int cnt = change(str);
    printf("大小写互换后的字符串为:%s\n", str);
    printf("字符串中共有%d个英文字母。\n", cnt);
    return 0;
}

```

以下是一个实现此功能的函数和一个示例:

#include <iostream>
#include <cstring>
using namespace std;

int change(char* s) {
    int count = 0;
    for (int i = 0; i < strlen(s); i++) {
        if (isalpha(s[i])) {
            if (islower(s[i])) {
                s[i] = toupper(s[i]);
            } else {
                s[i] = tolower(s[i]);
            }
            count++;
        }
    }
    return count;
}

int main() {
    char s[] = "Hello, World!";
    cout << "Before: " << s << endl;
    int count = change(s);
    cout << "After: " << s << endl;
    cout << "Number of English characters: " << count << endl;
    return 0;
}

运行结果如下:

Before: Hello, World!
After: hELLO, wORLD!
Number of English characters: 10

在该示例中,输入的字符串是"Hello, World!",其大小写字符被互换了,输出为"hELLO, wORLD!"。函数还返回了字符串中英文字符的个数,即10。



#include <stdio.h>
#include <stdlib.h>
int change(char* s)
{
    int count = 0, i = 0;
    if (s == NULL) {
        return 0;
    }
    while (s[i] != '\0')
    {
        if (s[i] >= 'a' && s[i] <= 'z')
        {
            s[i] -= 32;
            ++count;
        }
        else if (s[i] >= 'A' && s[i] <= 'Z')
        {
            s[i] += 32;
            ++count;
        }
        i++;
    }
    return count;
} 
int main(int argc, char* argv[])
{ 
    char str[1024]; 
    scanf("%s",str); 
    printf("result:%d\n", change(s)); 
}



```c
#include <stdio.h>#include <ctype.h>int change(char *s) {    int count = 0;    while (*s) {        if (isalpha(*s)) {            if (islower(*s)) {                *s = toupper(*s);            } else {                *s = tolower(*s);            }            count++;        }        s++;    }    return count;}int main() {    char s[] = "Hello, World! 你好,世界!";    int count = change(s);    printf("Result: %s\n", s);    printf("Number of English characters: %d\n", count);    return 0;}

```


int change(char *s)
{
    int i = 0;
    int len = strlen(s);
    for(i=0;i<len;i++) {
        char c;
        if('a'<=s[i]&&s[i]<='z') {
            s[i]-=32;
        }
        else if('A'<=s[i]&&s[i]<='Z') {
            s[i]+=32;
        }
    }
}

void main()
{
    char teststr[128]="Hello world! String test!";
    printf("before chang:\n");
    printf("%s\n", teststr);
    change(teststr);
    printf("after chang:\n");
    printf("%s\n", teststr);
}

运行结果如下:

img