C程序使字符串大写不起作用

C程序使字符串大写不起作用,c,string,C,String,所以,对于一个作业,我必须完成一个字符串大写的代码 我尝试的是: #include <stdio.h> void capitalize(char *str) { int i = 0; if (str[i] >= 97 && str[i] <= 122) { str[i] = str[i] - 32; } else { i++; } } void strCopy(ch

所以,对于一个作业,我必须完成一个字符串大写的代码

我尝试的是:

#include <stdio.h>

void capitalize(char *str)
{
    int i = 0;
    if (str[i] >= 97 && str[i] <= 122)
    {
        str[i] = str[i] - 32;
    }
    else
    {
        i++;
    }
}

void strCopy(char *str2, char *str1)
{
    while (*str2)
    {
      *str1 = *str2;
      str2++;
      str1++;
    }
    *str1 = '\0';
}

int main(int argc, char **argv)
{
    char string1[100] = "This is a really long string!";
    char string2[100];
    strCopy(string1,string2);
    capitalize(string2);
    printf("The original string is \"%s\"\n", string1);
    printf("The capitalized string is \"%s\"\n", string2);
}
#包括
无效大写(字符*str)
{
int i=0;
如果(str[i]>=97&&str[i]您的
capitalize()
函数只对一个字符运行。请这样尝试

for (int i = 0 ; str[i] != '\0' ; ++i) {
    if (str[i] >= 97 && str[i] <= 122)
        str[i] = str[i] - 32;
}
for(int i=0;str[i]!='\0';++i){

如果(str[i]>=97&&str[i]则问题在于
capitalize
函数没有循环。只能将字符串的第一个字母大写

您走在正确的轨道上,但您需要的是:

for (int i = 0; str[i] != '\0'; ++i) { // Here we check for the end condition of a string.
                                       // ie. Has the Null termination been reached?
   if (str[i] >= 'a' && str[i] <= 'z') {
      str[i] = str[i] - ('a' - 'A');
   }
}
for(inti=0;str[i]!='\0';++i){//这里我们检查字符串的结束条件。
//即,是否已达成无效终止?
如果(str[i]>='a'&&str[i]尝试以下方法:

void capitalize(char *str)
{
    int i = 0;
    while (str[i] != '\0')
    {
      if (str[i] >= 97 && str[i] <= 122) {
          str[i] = str[i] - 32;
      }
      i++;
    }
}
void大写(char*str)
{
int i=0;
while(str[i]!='\0')
{

如果(str[i]>=97&&str[i]您需要修正
大写(char*str)
来检查字符串的所有字符,而不仅仅是单个字符。使用指针可以避免将
包含在使用
strlen()
函数中,如下所示:

#include <stdio.h>

void capitalize(char *str)
{
    char *p = str;
    while(*p++) {
        if (*p >= 97 && *p <= 122) {
            *p -= 32;
        }
    }
}

void strCopy(char *str2, char *str1)
{
    while (*str2) {
        *str1 = *str2;
        str2++;
        str1++;
    }
    *str1 = '\0';
}

int main(int argc, char **argv)
{
    char string1[100] = "This is a really long string!";
    char string2[100];
    strCopy(string1, string2);
    capitalize(string2);
    printf("The original string is \"%s\"\n", string1);
    printf("The capitalized string is \"%s\"\n", string2);
}
#包括
无效大写(字符*str)
{
char*p=str;
而(*p++){

如果(*p>=97&&*p看一下
ctype
标题。有一些函数可能会对您有很大帮助。我想您需要在
capitalize
中设置一个循环。请参阅我的关于如何以简单的方式更改字符大小写的文章。感谢大家这么快就提供了帮助。知道我最大的错误是没有设置循环r,这让我感到欣慰A不仅仅是更严重的问题。你所有的建议都非常有用,再次感谢!一个很好的可读性改进是使用
'A'
而不是
97
'z'
而不是
122
'A'-'A'
,为什么不使用
toupper
?谢谢你的帮助,这是我的初衷我本来想要的,现在我明白我做错了什么!