C中使用函数将字符串转换为大写和小写

Use functions to convert string to upper and lowercase in C

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

将字符串转换为大写和小写必须在函数中完成。这些函数必须 return 没有任何内容(无效)并被调用: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] = '[=10=]';

    /* 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;
}

要创建函数,只需删除函数的代码(例如 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 执行类似操作。

您可以将用于将字符串转换为大写和小写的代码放在单独的函数中。像这样。

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

如果您被允许使用 tolower()toupper(),这有效:

#include <ctype.h>

// note unsigned char!
void string_upper( unsigned char *str )
{
    while ( *str )
    {
        *str = toupper( *str );
        str++;
    }
}

string_lower() 留作 reader... 的练习 ;-)