有没有办法在不使用 strupr 函数的情况下以大写字母打印所有字符串,因为它不是标准库函数?

Is there a way to print all string in capital letters without using strupr function as its not a standard library function?

我想打印存储在一个文件中的数据,该文件随机全部大写,strupr() 似乎是之前有人列出的东西,但它不是标准功能,可能不是跨平台的.有没有跨平台的东西?

编辑 1:

                                fgets(input1,254,title);
                                fgets(input2,254,author);
                                input1[strcspn(input1, "\n")] = '[=10=]';
                                input2[strcspn(input2, "\n")] = '[=10=]';
                                printf("<%s> <%s>\n",input1,input2 );

我想以大写形式打印存储在 input1input2 中的字符串。怎么做?

您可以逐个字符处理并使用toupper()。标准函数 C89 起。

您可以使用自定义函数,f.e。 upcase()。它读取文件中的每个字符,检查它是否为小写(如果是,使用 toupper() 函数将字符调整为大写),将整个文件内容存储到缓冲区中,然后用缓冲区中的内容:

FILE* upcase (const char* path)
{
    int c, cnt = 0, i = 0, j = 1;
    int n = 500;
    FILE* fp = fopen(path, "r+");

    char* buffer = calloc(n, sizeof(char));

    if (!fp || !buffer)
    {
       return NULL;
    }

    while ((c = fgetc(fp)) != EOF)
    {  
       if ( i == n )
       {
           j++;
           realloc(buffer, sizeof(char) * (n * j));

           if (!buffer)
           {
               return NULL;
           }

           i = -1;
       }  

       c = toupper(c);
       buffer[i] = c;

       i++;
       cnt++;
    }

    for ( int i = 0; i < cnt; i++ )
    {
        if (fputc(c, fp) == EOF)
        {
            fclose(buffer);
            return NULL;
        }
    }

    return fp;    
}

或者您可以检查字符是否在 a & z 之间,然后执行 a - 32。将改为大写。

这里a - 32 = A,因为ASCIIa的值是9797 - 32 = 65而我们都知道ASCII A 的值是 65.

代码:

#include <stdio.h>
#include <stdlib.h>

int main(void)
{
    FILE *fp;
    char buffer[255] = {'[=10=]'}, c;
    int i = 0;

    fp = fopen("txt.txt", "r");

    if(!fp)
    {
        perror("txt");
        exit(1);
    }

    while( (c = getc(fp)) != EOF)
        buffer[i++] = c;

    for( i = 0; buffer[i] != '[=10=]'; i++)
    {
        if(buffer[i] >= 'a' && buffer[i] <= 'z')
            buffer[i] = buffer[i] - 32;
        printf("%c", buffer[i]);
    }
    fclose(fp);
    return 0;
}

输出:

HELLO!
THIS IS 2ND LINE.