Проблема в программе для преобразования строки верхнего регистра в строчные с использованием функции в C - PullRequest
0 голосов
/ 05 декабря 2018

Я пытаюсь написать программу, которая будет сравнивать только одну и ту же букву, но сначала она должна преобразовывать любой случай в конкретный случай.

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

#include<stdio.h>
#include<string.h>
void order(char input[])
{
    int i=0;

    while(input[i]!='\0')
    {
        if(input[i]>'65' && input[i]<'92')
        {
            input[i]+=32;
           // printf("WORKING\n");
        }

        i++;

    }
}
int main()
{
    char input1[101], output1[101];
    char input2[101], output2[101];
    int r;

    scanf("%s",tolower(input1));
    scanf("%s",input2);

    order(input1);
    order(input2);

    printf("%s\n",input1);
    printf("%s\n",input2);

    /*

    r=strcmp(output1,output2);


    if(r<0)
        printf("-1\n");
    else if(r>0)
        printf("1\n");
    else
        printf("0\n");

    */

}

Ответы [ 3 ]

0 голосов
/ 05 декабря 2018

Вы пытаетесь передать char* в tolower in scanf("%s",tolower(input1));.

Измените его на scanf("%s", input1);

c - преобразовать смешанныйрегистр всех строчных букв должен рассказать вам, как преобразовать строку в нижний регистр.

Взгляните на https://linux.die.net/man/3/tolower и https://linux.die.net/man/3/toupper.

0 голосов
/ 05 декабря 2018

Постоянные ошибки и ошибки, не соответствующие единице.

  • '65' - это многобайтовая константа, и, конечно, подразумевается 65. @ gsamaras .ASCII Z равно 90.

    // if(input[i]>'65' && input[i]<'92')
    if(input[i]>65 && input[i]< Zee)
    
  • Выкл. На 1 из-за > против >=

    // if(input[i]>'65' && input[i]<'92')
    // if(input[i]>65 && input[i]< Zee)
    if(input[i] >= 65 && input[i] <= 90)
    

Символьные константы более самодокументированы.Рассмотрим 'A'

    if(input[i] >= 'A' && input[i] <= 'Z')

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

    if(isupper((unsigned char) input[i]))

И все же код может напрямую вызывать toupper() и пропускать if().

while(input[i]) {
  input[i] = tolower((unsigned char) input[i]);
  i++;
}

// or 

for (size_t i = 0; input[i]; i++) {
  input[i] = tolower((unsigned char) input[i]);
}
0 голосов
/ 05 декабря 2018

Измените это:

if(input[i]>'65' && input[i]<'92')

на это:

if(input[i] >= 65 && input[i] <= 90)

, так как вы хотите проверить коды ASCII для A и Z. Обратите внимание, что, поскольку вы использовали магические числа, высделал ошибку для обоих.Мне пришлось проверить таблицу ASCII, чтобы выяснить, что вам также нужен знак равенства и 90 (код для Z) вместо 92 (код для \).

Я предлагаю вам тогдаиспользуйте символьные константы, например:

if(input[i] >= 'A' && input[i] <= 'Z')
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...