如何严格使用 fgets 函数打印出 uppercase/lowercase 个字母的字符串?
How to print out a string in uppercase/lowercase letters strictly using the fgets function?
这是我的代码:
#include <stdio.h>
#include <stdlib.h>
#include <ctype.h>
#include <string.h>
int main()
{
FILE *fp;
char s[50];
fp = fopen("line.txt" , "r");
if( fgets (s, 50, fp)!=NULL )
{
puts(s);
}
fclose(fp);
return 0;
}
我知道如何使用 printf 函数以所有大写和小写字母显示字符串。但我不知道如何使用 fgets 函数来完成。我也在从文件中读取字符串,所以这对我来说很棘手。
strupr()
函数 (a non-standard function from Microsoft's C library
) 将该字符串中的所有小写字符转换为大写字符。 strupr() 的结果存储在同一个字符串中。
char str1[]="UppEr Case";
puts(strupr(str1)); //Converts to uppercase and displays it.
或
您可以编写自己的函数。
int str_upr(char *cstr)
{
char *str=cstr;
for (;*str;str++) {
if (isalpha(*str))
*str += 'A' - 'a';
}
return 0;
}
此实现将修改您的字符数组。
但是,如果你只是想打印字符数组而不修改原始数组,你可以使用这个实现。
void str_upr(char *str)
{
int c;
for (;*str;str++) {
c=*str;
if (isalpha(c))
c += 'A'-'a';
putc(c, stdout);
}
}
if( fgets (s, 50, fp)!=NULL )
{
for( size_t ii = 0; s[ii]; ii++ )
{
s[ii] = toupper((unsigned char)s[ii]);
}
puts(s);
}
读取字符串后(通过任何方式),除了 ctype.h
中的 toupper
函数外,您还可以进行从小写到大写(以及从大写到to-lower) 通过简单的按位运算。
字符值
您会经常听到术语 7 位 ASCII。这是因为 ASCII 字符集由每个字符值中的前 7 位表示。 (对于标准字符,第 8 位总是 0
。)第 6 位是 大小写位 。 (对于 A-Za-z
)对于 A-Z
, 大小写位 是 0
,对于 a-z
,它是 1
。
char | dec | hex | binary
-----+-------+--------+---------
A | 65 | 0x41 | 01000001
B | 66 | 0x42 | 01000010
C | 67 | 0x43 | 01000011
D | 68 | 0x44 | 01000100
...
a | 97 | 0x61 | 01100001
b | 98 | 0x62 | 01100010
c | 99 | 0x63 | 01100011
d | 100 | 0x64 | 01100100
要从小写更改为大写,所需要做的就是检查以确保您在a-z
然后简单地将第 6 位从 1
翻转到 0
.
在您的例子中,从 stdin
中读取一个字符串,然后将任何小写字符更改为大写字符,可以按如下方式完成:
#include <stdio.h>
enum { MAXC = 512 };
int main (void) {
char str[MAXC] = "";
char *p = str;
printf ("\n enter str: ");
if (!fgets (str, MAXC, stdin)) {
fprintf (stderr, "error: invalid input.\n");
return 1;
}
for (; *p; p++) /* for each character */
if ('a' <= *p && *p <= 'z') /* if lower-case */
*p ^= (1 << 5); /* set case bit upper */
printf (" uc-string: %s\n", str);
return 0;
}
例子Use/Output
$ ./bin/str2upper
enter str: This is A String with UPPPER and lower case.
uc-string: THIS IS A STRING WITH UPPPER AND LOWER CASE.
仔细阅读,如果您有任何问题,请告诉我。
这是我的代码:
#include <stdio.h>
#include <stdlib.h>
#include <ctype.h>
#include <string.h>
int main()
{
FILE *fp;
char s[50];
fp = fopen("line.txt" , "r");
if( fgets (s, 50, fp)!=NULL )
{
puts(s);
}
fclose(fp);
return 0;
}
我知道如何使用 printf 函数以所有大写和小写字母显示字符串。但我不知道如何使用 fgets 函数来完成。我也在从文件中读取字符串,所以这对我来说很棘手。
strupr()
函数 (a non-standard function from Microsoft's C library
) 将该字符串中的所有小写字符转换为大写字符。 strupr() 的结果存储在同一个字符串中。
char str1[]="UppEr Case";
puts(strupr(str1)); //Converts to uppercase and displays it.
或
您可以编写自己的函数。
int str_upr(char *cstr)
{
char *str=cstr;
for (;*str;str++) {
if (isalpha(*str))
*str += 'A' - 'a';
}
return 0;
}
此实现将修改您的字符数组。
但是,如果你只是想打印字符数组而不修改原始数组,你可以使用这个实现。
void str_upr(char *str)
{
int c;
for (;*str;str++) {
c=*str;
if (isalpha(c))
c += 'A'-'a';
putc(c, stdout);
}
}
if( fgets (s, 50, fp)!=NULL )
{
for( size_t ii = 0; s[ii]; ii++ )
{
s[ii] = toupper((unsigned char)s[ii]);
}
puts(s);
}
读取字符串后(通过任何方式),除了 ctype.h
中的 toupper
函数外,您还可以进行从小写到大写(以及从大写到to-lower) 通过简单的按位运算。
字符值
您会经常听到术语 7 位 ASCII。这是因为 ASCII 字符集由每个字符值中的前 7 位表示。 (对于标准字符,第 8 位总是 0
。)第 6 位是 大小写位 。 (对于 A-Za-z
)对于 A-Z
, 大小写位 是 0
,对于 a-z
,它是 1
。
char | dec | hex | binary
-----+-------+--------+---------
A | 65 | 0x41 | 01000001
B | 66 | 0x42 | 01000010
C | 67 | 0x43 | 01000011
D | 68 | 0x44 | 01000100
...
a | 97 | 0x61 | 01100001
b | 98 | 0x62 | 01100010
c | 99 | 0x63 | 01100011
d | 100 | 0x64 | 01100100
要从小写更改为大写,所需要做的就是检查以确保您在a-z
然后简单地将第 6 位从 1
翻转到 0
.
在您的例子中,从 stdin
中读取一个字符串,然后将任何小写字符更改为大写字符,可以按如下方式完成:
#include <stdio.h>
enum { MAXC = 512 };
int main (void) {
char str[MAXC] = "";
char *p = str;
printf ("\n enter str: ");
if (!fgets (str, MAXC, stdin)) {
fprintf (stderr, "error: invalid input.\n");
return 1;
}
for (; *p; p++) /* for each character */
if ('a' <= *p && *p <= 'z') /* if lower-case */
*p ^= (1 << 5); /* set case bit upper */
printf (" uc-string: %s\n", str);
return 0;
}
例子Use/Output
$ ./bin/str2upper
enter str: This is A String with UPPPER and lower case.
uc-string: THIS IS A STRING WITH UPPPER AND LOWER CASE.
仔细阅读,如果您有任何问题,请告诉我。