输入一个字符串,如何将大写字母变成小写,小写变成大写,并输出变换后的字符串?

时间:2022-06-26 01:25:21
如题,用turbo C怎么做到“输入一个字符串,如何将大写字母变成小写,小写变成大写,并输出变换后的字符串?”

14 个解决方案

#1


去观察一下二进制的'a'和'A'有什么区别,将那一位逆转就行了~~

#2


如果我没记错。
A  65 
a  65 + 32

所以
A + 32 = a;
a - 32 = A;

#3


用islower或者isupper测试下,是小写的减32,是大写的加32。。。

#5


引用 4 楼 lovec001 的回复:
http://topic.csdn.net/u/20100527/19/18534287-223b-457f-b79c-863b0288a167.html

楼上什么情况,居然给自己的问题做广告?

#6



char* convert(char *src)
{
    char *p = src;
    assert(p != NULL)
    while(*p)
    {
        if ('A' <= *p && *p < 'Z')
            *p |= 0x20;
        else if ('a' <= *p && *p < 'z')
            *p &= ~0x20;
        p++;
    }
    return src;
}

#7


引用 3 楼 qinguan0619 的回复:
用islower或者isupper测试下,是小写的减32,是大写的加32。。。

这个主意不错,楼主可以试试


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

char *change(char str[]) //返回值是改变后的字符串
{
int i;
for (i = 0; str[i] != '\0'; i++)
{
if (isupper(str[i])) //如果是大写字母
str[i] += 32;
else if (islower(str[i])) //如果是小写字母
str[i] -= 32;
}
return str;
}

int main()
{
char str[] = "Hello,World!";
strcpy(str, change(str));
puts(str);
return 0;
}

#8


1、先判断
2、变换
3、输出

#9


还有更简单的

#include <stdio.h>
#include <ctype.h>
#include <string.h>
#define MAXSIZE 81

void change(char str[]) //返回值是改变后的字符串
{
int i;
for (i = 0; str[i] != '\0'; i++)
{
if (isupper(str[i])) //如果是大写字母
str[i] += 32;
else if (islower(str[i])) //如果是小写字母
str[i] -= 32;
}
}

int main()
{
char str[MAXSIZE] = "Hello,World!";
change(str);
puts(str);
return 0;
}

#10


引用 9 楼 nbda1121440 的回复:
还有更简单的
C/C++ code

#include <stdio.h>
#include <ctype.h>
#include <string.h>
#define MAXSIZE 81

void change(char str[])    //返回值是改变后的字符串
{
    int i;
    for (i = 0; str[i] != '\0'; i++)
    {
   ……

就这样。。

#11


这样是可以,但如何判断换行符一直是我的一个疑问??
#include <stdio.h>
#include <stdlib.h>

int main(void)
{
    FILE *fp;
    int num[9],i; // 有9个数据

    if((fp = fopen("a.txt","r"))==NULL)
    {
        printf("打开错误!");
        exit(1);
    }
    for(i=0;i<9;i++)
        fscanf(fp,"%d",&num[i]); // 读入9个数据
    
    for(i=0;i<9;i++)
        printf("%d ",num[i]);

    return 0;
}

#12


引用 11 楼 bobo364 的回复:
这样是可以,但如何判断换行符一直是我的一个疑问??

C/C++ code
#include <stdio.h>
#include <stdlib.h>

int main(void)
{
    FILE *fp;
    int num[9],i; // 有9个数据

    if((fp = fopen("a.txt","r"))==NULL)
    {
    ……

这个貌似不用判断换行符也是可以的吧。
因为fscanf(fp, "%d", &num[i]);这条语句如果读到非整型的数据就会跳过去的,继续读下一个整形数。

#13



#include "stdio.h"
int main(void)
{
    char p[20];
    int i;
    scanf("%s",p);
    for(i=0;i<strlen(p);i++)
      printf("%c",(*(p+i)>=0x41&&*(p+i)<=0x5A)?(*(p+i)&0xDF):(*(p+i)|0x20));
    return 0;
}

#14


写的不错呀

#1


去观察一下二进制的'a'和'A'有什么区别,将那一位逆转就行了~~

#2


如果我没记错。
A  65 
a  65 + 32

所以
A + 32 = a;
a - 32 = A;

#3


用islower或者isupper测试下,是小写的减32,是大写的加32。。。

#4


#5


引用 4 楼 lovec001 的回复:
http://topic.csdn.net/u/20100527/19/18534287-223b-457f-b79c-863b0288a167.html

楼上什么情况,居然给自己的问题做广告?

#6



char* convert(char *src)
{
    char *p = src;
    assert(p != NULL)
    while(*p)
    {
        if ('A' <= *p && *p < 'Z')
            *p |= 0x20;
        else if ('a' <= *p && *p < 'z')
            *p &= ~0x20;
        p++;
    }
    return src;
}

#7


引用 3 楼 qinguan0619 的回复:
用islower或者isupper测试下,是小写的减32,是大写的加32。。。

这个主意不错,楼主可以试试


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

char *change(char str[]) //返回值是改变后的字符串
{
int i;
for (i = 0; str[i] != '\0'; i++)
{
if (isupper(str[i])) //如果是大写字母
str[i] += 32;
else if (islower(str[i])) //如果是小写字母
str[i] -= 32;
}
return str;
}

int main()
{
char str[] = "Hello,World!";
strcpy(str, change(str));
puts(str);
return 0;
}

#8


1、先判断
2、变换
3、输出

#9


还有更简单的

#include <stdio.h>
#include <ctype.h>
#include <string.h>
#define MAXSIZE 81

void change(char str[]) //返回值是改变后的字符串
{
int i;
for (i = 0; str[i] != '\0'; i++)
{
if (isupper(str[i])) //如果是大写字母
str[i] += 32;
else if (islower(str[i])) //如果是小写字母
str[i] -= 32;
}
}

int main()
{
char str[MAXSIZE] = "Hello,World!";
change(str);
puts(str);
return 0;
}

#10


引用 9 楼 nbda1121440 的回复:
还有更简单的
C/C++ code

#include <stdio.h>
#include <ctype.h>
#include <string.h>
#define MAXSIZE 81

void change(char str[])    //返回值是改变后的字符串
{
    int i;
    for (i = 0; str[i] != '\0'; i++)
    {
   ……

就这样。。

#11


这样是可以,但如何判断换行符一直是我的一个疑问??
#include <stdio.h>
#include <stdlib.h>

int main(void)
{
    FILE *fp;
    int num[9],i; // 有9个数据

    if((fp = fopen("a.txt","r"))==NULL)
    {
        printf("打开错误!");
        exit(1);
    }
    for(i=0;i<9;i++)
        fscanf(fp,"%d",&num[i]); // 读入9个数据
    
    for(i=0;i<9;i++)
        printf("%d ",num[i]);

    return 0;
}

#12


引用 11 楼 bobo364 的回复:
这样是可以,但如何判断换行符一直是我的一个疑问??

C/C++ code
#include <stdio.h>
#include <stdlib.h>

int main(void)
{
    FILE *fp;
    int num[9],i; // 有9个数据

    if((fp = fopen("a.txt","r"))==NULL)
    {
    ……

这个貌似不用判断换行符也是可以的吧。
因为fscanf(fp, "%d", &num[i]);这条语句如果读到非整型的数据就会跳过去的,继续读下一个整形数。

#13



#include "stdio.h"
int main(void)
{
    char p[20];
    int i;
    scanf("%s",p);
    for(i=0;i<strlen(p);i++)
      printf("%c",(*(p+i)>=0x41&&*(p+i)<=0x5A)?(*(p+i)&0xDF):(*(p+i)|0x20));
    return 0;
}

#14


写的不错呀