小写到大写函数-C

小写到大写函数-C,c,function,C,Function,我编写这个函数是为了将预设的小写str转换为大写变量。我已经尝试了我所知道的每一种不同的配置,在打印时都会将小写转换为大写。它仍然以小写结尾。所以我有点困了 char* stoupper(char str[]); char str[100]= "uppercase"; printf("%s" , stoupper(str)); // Test to make sure it is working char* stoupper(char str[]) { int i = 0;

我编写这个函数是为了将预设的小写str转换为大写变量。我已经尝试了我所知道的每一种不同的配置,在打印时都会将小写转换为大写。它仍然以小写结尾。所以我有点困了

char* stoupper(char str[]);

char str[100]= "uppercase";

printf("%s" , stoupper(str)); // Test to make sure it is working 

char* stoupper(char str[])
{ 
      int i = 0; 

      while(str[i] != '\0') 
      { 
                   if(str[i] >= 'A' && str[i] <= 'Z') 
                   str[i] = str[i] + ('A' - 'a'); 
                   i++; 
      }
      return str;
}  

/* I've tried various variations of this function this is just the one i had first */ 
char*stoupper(charstr[]);
字符str[100]=“大写”;
printf(“%s”,stoupper(str));//测试以确保它工作正常
char*stoupper(char str[]
{ 
int i=0;
while(str[i]!='\0')
{ 

如果(str[i]>='A'&&str[i]您的代码只修改已经存在的大写字母,并将它们转换为谁知道是什么(好吧,我相信您可以通过ASCII表来解决)。如果您想对小写字母进行操作,您需要更改
if
条件:

if (str[i] >= 'a' && str[i] <= 'z') 

if(str[i]>='a'&&str[i]你为什么要重新发明轮子?ctype.h是你的朋友

使用toupper(int)方法

char* stoupper(char str[]);

char str[100]= "uppercase";

printf("%s" , stoupper(str)); // Test to make sure it is working 

char* stoupper(char str[])
{ 
      int i = 0; 

      while(str[i]) 
      { 
          str[i]=toupper(str[i]);
          i++; 
      }
      return str;
}  

我认为您的if条件应该是:

if(str[i] >= 'a' && str[i] <= 'z') 

if(str[i]>='a'&&str[i]需要更改if语句中的条件


如果(str[i]>='A'&&str[i]您需要在该函数中创建一个新字符串以返回。您的代码只修改已经存在的大写字母。@squiguy,为什么这么说?在我看来,就地转换似乎是合理的语义。而且您的代码还忽略了一个事实,即并非所有平台都有表示字符的连续字节。
'a'..'Z'
。是否存在一些错误ason
str[i]=toupper(str[i])
,使用from ctype.h不被考虑?在
ctype.h
中还有一个非常好的函数,它们彼此都很简单。是的,如果a-z不由顺序值表示,islower()将更易于移植。
char* stoupper(char str[])
{ 
      for(int i=0;i<strlen(str);i++)
          if(!(str[i]>='A'&&str[i]<='Z')){
              str[i]=str[i]^' ';
          }

      return str;
}