Используйте функции для преобразования строки в верхний и нижний регистр в C - PullRequest
0 голосов
/ 29 октября 2019

Это домашнее задание, и это задание, которое мне дали:
Печать строки в верхнем и нижнем регистре
Разбивает строку в середине и печатает две части с "-" между требованиями:

Преобразование строки в верхний и нижний регистр должно выполняться в функциях. Эти функции не должны возвращать ничего (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;
}

Ответы [ 3 ]

2 голосов
/ 29 октября 2019

Чтобы создать функцию, просто удалите код (например, цикл 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.

1 голос
/ 29 октября 2019

Если вам разрешено использовать tolower() и toupper(), это работает:

#include <ctype.h>

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

string_lower() оставлено в качестве упражнения для читателя ...; -)

1 голос
/ 29 октября 2019

Вы можете просто поместить свой код для преобразования строки в верхний и нижний регистр в отдельных функциях. как это.

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