c语言练习题31:字符转换

scanf(“%[^\n]“, str)正则用法

1 ^表示"非",[^\n]表示读入换行字符就结束读入。这个是scanf的正则用法,我们都知道scanf不能接收空格符,一接受到空格就结束读入,所以不能像gets()等函数一样接受一行字符串,但是使用%[^\n]就可以读取一行,直到碰到’\n’才结束读入。

使用%[^\n]后scanf可以读入空格类似于gets(),gets可以直接读入空格。
2 *表示该输入项读入后不赋予任何变量,即scanf("%*[^\n]%*c")表示跳过一行字符串。其中%c可以把’\n’吸收掉,防止影响后续输入。

使用*后scanf()既可以吧'\n'吸收防止影响后续操作。

字符转换

输⼊⼀个字符串,将字符串中⼤写字⺟全部转为⼩写字⺟,⼩写字⺟转成⼤写字⺟,其他字符保持不变。注:字符串的⻓度⼩于等于30,其中字符串中包含空格。

例如:输入:abcABC

           输出:ABCabc

代码:

//法一:库函数的使用
//#include
//#include
//int main() {
//	char buf[31] = { 0 };
//	scanf("%[^\ns]", buf);
//	//gets(buf);
//	int i = 0;
//	while (buf[i])
//	{
//		if (islower(buf[i])) {
//			buf[i] = toupper(buf[i]);
//		}
//		else if (isupper(buf[i])) {
//			buf[i] = tolower(buf[i]);
//		}
//		i++;
//	}
//	printf("%s\n", buf);
//	return 0;
//}
//法二(不使⽤库函数)
#include
int main() {
	int i = 0;
	char buf[31] = { 0 };
	scanf("%[^\n]s", buf);
	while (buf[i]) {
		if (buf[i] >= 'a' && buf[i] <= 'z') {
			buf[i] -= 32;
		}
		else if (buf[i] >= 'A' && buf[i] <= 'Z') {
			buf[i] += 32;
		}
		i++;
	}
	printf("%s\n", buf);
}

运行结果:

c语言练习题31:字符转换_第1张图片

 

你可能感兴趣的:(c语言,开发语言)