【问题标题】:Use functions to convert string to upper and lowercase in C在C中使用函数将字符串转换为大写和小写
【发布时间】:2020-02-25 01:38:21
【问题描述】:

这是作业,这是给我的任务:
以大写和小写形式打印字符串
拆分中间的字符串并打印两个部分之间的“ - ” 要求:

字符串大小写转换必须在函数中完成。这些函数必须不返回任何内容 (void) 并被调用:string_upper、string_lower。
不要使用 strlwr 或 strupr。

注意:字符串长度总是偶数。

预期输出(您收到的字符串作为输入):

大写的字符串是'ABCDEFGH'
小写的字符串是'abcdefgh'
一分为二的字符串是'abcd - efgh'

我设法想出了一些可行的方法,但它没有使用任务中所需的功能。你怎么能用函数做到这一点?

我环顾四周,但找不到任何使用函数将字符串转换为大写和小写的示例

#include<stdio.h>
#include<string.h>

int main() {

    char inputString[100], leftHalf[100], rightHalf[100];
    int length, mid, i, k;

    /* Read input string from user using gets */
    printf("Enter a string\n");
    gets(inputString);
    /* Find length of string using strlen function */
    length = strlen(inputString);

    mid = length/2;
    /* Copy left half of inputString to leftHalf */
    for(i = 0; i < mid; i++) {
        leftHalf[i]= inputString[i];
    }
    leftHalf[i] = '\0';

    /* Copy right half of inputString to rightHalf  */
    for(i = mid, k = 0; i <= length; i++, k++) {
        rightHalf[k]= inputString[i];
    }

    for(i=0;i<=strlen(inputString);i++)
    {
        if(inputString[i]>=65&&inputString[i]<=90)
            inputString[i]=inputString[i]+32;
    }
    printf("String in Lowercase: %s\n",inputString);
    /* To print string in upperCase*/
    for(i=0;i<=strlen(inputString);i++)
    {
        if(inputString[i]>=97&&inputString[i]<=122)
            inputString[i]=inputString[i]-32;
    }
    printf("String in Uppercase: %s\n",inputString);


    /* Printing left and right half of string */
    //printf("Left half : %s\n",leftHalf);
    //printf("Right half : %s\n",rightHalf);
    printf("%s-%s",leftHalf, rightHalf);

    return 0;
}

【问题讨论】:

  • 试试i&lt;=strlen(inputString) --> i&lt;strlen(inputString)。也许还有其他问题。
  • 在某处设置righttHalf[mid] = '\0';
  • 不清楚你的问题是什么。看起来如此简单。请解释您遇到问题的明显步骤。定义一个空函数?调用一个空函数?将空函数更改为迷你 helloworld(即打印一些固定字符串)?更改函数以接受字符串参数?用字符串参数调用函数?打印函数内部的字符串参数?将字符串值复制到本地?处理本地字符串?决定将工作程序的哪一部分转移到函数中?
  • ...i &lt;= length; 也应该是 i &lt; length;
  • 你可以使用toupper()tolower()吗?这是最简单和便携的解决方案。

标签: c string function uppercase lowercase


【解决方案1】:

要创建函数,只需将代码(例如 for 循环)删除到函数中。不要忘记声明辅助变量(例如 int i)。像这样

void string_upper (char *inputString)
{
    int i;
    for(i=0;i<=strlen(inputString);i++)
    {
        if(inputString[i]>=65&&inputString[i]<=90)
            inputString[i]=inputString[i]+32;
    }
}

然后在你的主代码中,你调用

string_upper (inputString);

而不是那里的 for 循环。

对 string_lower 执行类似操作。

【讨论】:

    【解决方案2】:

    你可以把你的代码在单独的函数中转换成大写和小写。像这样。

    void string_upper (char* str) {
        for(int i=0; i<=strlen(str); i++) {
            if(str[i]>=97 && str[i]<=122)
                str[i]=str[i]-32;
        }
    }
    
    void string_lower(char* str) {
        //...
    }
    
    int main() {
    
        char inputString[100], leftHalf[100], rightHalf[100];
        int length, mid, i, k;
    
        //...
    
        /* call function to convert string to upper-case*/
        string_upper(inputString);
        printf("String in Uppercase: %s\n",inputString);
    
        /* call function to convert string to lower-case */
        string_lower(inputString);
        printf("String in Lowercase: %s\n",inputString);
    
        //...
    
        return 0;
    }
    

    【讨论】:

      【解决方案3】:

      如果您被允许使用tolower()toupper(),则可以:

      #include <ctype.h>
      
      // note unsigned char!
      void string_upper( unsigned char *str )
      {
          while ( *str )
          {
              *str = toupper( *str );
              str++;
          }
      }
      

      string_lower() 留给读者作为练习...... ;-)

      【讨论】:

        猜你喜欢
        • 2021-06-11
        • 1970-01-01
        • 1970-01-01
        • 2013-12-17
        • 1970-01-01
        • 2017-05-18
        • 2016-01-10
        • 2010-12-29
        • 2014-03-30
        相关资源
        最近更新 更多