strupr(); 我不做的工作

fud*_*din 1 c

我做了一个程序,将小写字符串转换为大写字母,如strupr(); 在strings.h ..当我运行程序时打印一些ascii代码

#include<stdio.h>
#include<conio.h>

void xstrupr(char string[]);

void main(void)
{
    char string[40];
    puts("Enter string:");
    gets(string);
    xstrupr(string);
    printf(" %s ",string);
    getch();
}

void xstrupr(char string[])
{
    int i;
    for(i=0;;i++)
    {
        if ((string[i]>='a')&&(string[i]<='z') )
            string[i]+=64;
        else
            if(string[i]=='\0')
                break;
    }
}
Run Code Online (Sandbox Code Playgroud)

unw*_*ind 8

如果你不介意我这么说,这太可怕了.当然,不要亲自接受这个.

  • 不要依赖ASCII值,也不要将实际字符值硬编码为文字数字.
  • 不要将char变量用作循环索引; 他们通常太小了.
  • 使用islower()检查一个字符是小写.
  • 使用toupper()将其转换为大写.
  • 意识到像这样的代码不适用于大多数语言
  • 使用宽字符也不够; 从小写到高位时,某些语言的单词会改变长度(charactercount).

我建议的这种风格的实现方式是:

#include <ctype.h>

void xstrup(char *string)
{
  for(; *string; string++)
    *string = toupper((unsigned char) *string);
}
Run Code Online (Sandbox Code Playgroud)

请注意,这只是一个合理的(在我看来)实现它想要实现的目标,它绝不是完美的,也不能解决我的所有抱怨.