сделать функцию превращения строчной строки в строчную в c - PullRequest
0 голосов
/ 27 июня 2018

Я все еще начинающий в программировании функций и Си. Я пытаюсь сделать функцию для преобразования в верхний регистр, но, кажется, я испортил его по указателю (?)

#include <stdio.h>

void mytoupper(char *s[]) {
    int i = 0;
    while (s[i] != '\0') {
        if (s[i] >= 'a' && s[i] <= 'z') {
            s[i] = s[i] - 32;
        }
        i++;
    }
    return s;
}

int main(void) {
    char s[32];
    printf("Insert string:");
    printf("%s", s);
    printf("%s", mytoupper(s[32]));
    return 0;
}

Ответы [ 2 ]

0 голосов
/ 28 июня 2018

В вашем коде несколько проблем:

  • неверное определение для mytoupper: вместо char *s[] должен принимать аргумент char *s и возвращать char *.
  • При изменении символа с нижнего на верхний регистр не следует использовать жестко закодированное значение 32, которое работает только для ASCII, используйте более общий подход с s[i] = s[i] - 'a' + 'A';
  • Чтобы прочитать строку, используйте scanf("%31s", s); вместо printf("%s", s);, и настоятельно рекомендуется проверить возвращаемое значение scanf()
  • Аргумент в printf("%s", mytoupper(s[32])); неверен: вы должны просто написать printf("%s", mytoupper(s));

Вот исправленная версия:

#include <stdio.h>

char *mytoupper(char *s) {
    int i = 0;
    while (s[i] != '\0') {
        if (s[i] >= 'a' && s[i] <= 'z') {
            s[i] = s[i] - 'a' + 'A';
        }
        i++;
    }
    return s;
}

int main(void) {
    char s[32];
    printf("Insert string:");
    if (scanf("%31s", s) == 1) {
        printf("%s\n", mytoupper(s));
    }
    return 0;
}
0 голосов
/ 27 июня 2018

В вашем коде есть несколько мест, которые не будут работать должным образом.

  1. Вы неправильно получаете ввод пользователя, вместо этого вы пытаетесь напечатать «пустую» строку.

    printf("%s",s);
    

    Вы можете изменить это на:

    scanf("%31s",s);
    
  2. Вы принимаете массив указателей на символы в своей функции mytoupper, но это не нужно. Вместо этого вы можете просто передать ему массив символов.

    void mytoupper(char s[]) 
    
  3. Вы пытаетесь использовать возвращаемое значение функции void. Вы можете либо вызвать функцию, затем напечатать строку, либо заставить функцию вернуть строку.

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

    mytoupper(s);
    printf("%s", s);
    

    Или измените функцию на:

    char* mytoupper(char s[]) {
    

    Затем выведите строку:

    printf("%s", mytoupper(s));
    
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...