14 个解决方案
#1
去观察一下二进制的'a'和'A'有什么区别,将那一位逆转就行了~~
#2
如果我没记错。
A 65
a 65 + 32
所以
A + 32 = a;
a - 32 = A;
A 65
a 65 + 32
所以
A + 32 = a;
a - 32 = A;
#3
用islower或者isupper测试下,是小写的减32,是大写的加32。。。
#5
楼上什么情况,居然给自己的问题做广告?
#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
这个主意不错,楼主可以试试
#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、输出
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
就这样。。
#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
这个貌似不用判断换行符也是可以的吧。
因为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;
A 65
a 65 + 32
所以
A + 32 = a;
a - 32 = A;
#3
用islower或者isupper测试下,是小写的减32,是大写的加32。。。
#4
#5
楼上什么情况,居然给自己的问题做广告?
#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
这个主意不错,楼主可以试试
#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、输出
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
就这样。。
#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
这个貌似不用判断换行符也是可以的吧。
因为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
写的不错呀