【问题标题】:C program to capitalize string not working将字符串大写的C程序不起作用
【发布时间】:2016-02-08 22:06:36
【问题描述】:

因此,对于一个作业,我必须完成一个旨在将字符串大写的代码。

我尝试的是这样的:

#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);
}

但是,当我尝试运行它返回的代码时:

原始字符串是“这是一个非常长的字符串!”
大写的字符串是“This is a very long string!”

strcopy 似乎不是问题,因为它将string1 正确复制到string2

我不明白为什么capitalize 不起作用,因为如果字母在 小写字母的ascii代码。

非常感谢有人帮助指出错误所在。

提前致谢!

【问题讨论】:

  • 看看ctype 标头。有一些功能可能会对您有很大帮助。我猜你需要在capitalize 内有一个循环。
  • 查看我的answer here,了解如何以简单的方式更改字符的大小写..
  • 感谢大家这么快的帮助!知道我最大的错误不是进入循环而不是更严重的错误,这让我松了一口气。您的所有建议都非常有帮助,再次感谢!

标签: c string


【解决方案1】:

问题是您的capitilize 函数没有循环。您只能将字符串的第一个字母大写。

您在正确的轨道上,但您正在寻找的是:

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');
   }
}

Here is a live demo for you to play with!

【讨论】:

  • 感谢您的帮助,这正如我最初想要的那样,现在我明白我做错了什么!
【解决方案2】:

您的capitalize() 函数只运行一个字符。像这样试试

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

每个字符执行操作,直到找到'\0'

【讨论】:

  • 一个很好的可读性改进是使用'a'而不是97'z'而不是122'A' - 'a'作为区别
【解决方案3】:

试试这个:

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

【讨论】:

    【解决方案4】:

    你需要修复capitalize(char *str)来检查字符串的所有字符,而不仅仅是单个字符。使用指针可以让你免于包含&lt;string.h&gt;来使用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);
    }
    

    【讨论】:

    • 为什么不使用toupper
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-02-23
    相关资源
    最近更新 更多