Я хочу изменить строку в C без использования строковых функций, а также исправить строку? - PullRequest
0 голосов
/ 07 марта 2019

// я использую Visual Studio, и я получил ошибку проверки во время выполнения # 3 - T?

// str = "Привет, как дела"

// reverse_str = "Ой, эра!"

// correct_str = "ты как Привет"

#include<stdio.h>

#include<string.h>

void reverse_str(char *str)

{

    char *begin_str, *end_str, temp;
    int l, i;
    l = strlen(str);

    begin_str = str;
    end_str = str;

    for (i = 0; i < l - 1; i++)
        end_str++;

    for (i = 0; i < l / 2; i++)
    {
        temp = *end_str;
        *end_str = *begin_str;
        *begin_str = temp;

        begin_str++;
        end_str--;
    }

}

void correct_str(char *str)

{

    char *nb, *ne, temp;
    int nl, i, l;

    l = strlen(str);

    nb = str;
    ne = str;
    while (*str)
    {

        for (i = 0; i < l - 1; i++)
        {
            if (ne != ' ')
                ne++;
            else
            {
                ne = ne - 1;
                nl = ne;

                for (i = 0; i < nl / 2; i++)
                {
                    temp = *ne;
                    *ne = *nb;
                    *nb = temp;

                    nb++;
                    ne--;
                }
            }
        }
        nb = nl + 1;
        ne = nl + 1;
    }
}

void main()

{

    char str[100] = "hello world How are you";
    reverse_str(str);
    printf("%s\n", str);
    correct_str(str);
    printf("%s\n", str);


}

1 Ответ

1 голос
/ 07 марта 2019

// я использую Visual Studio, и я получил ошибку проверки во время выполнения # 3 - T?

Вы путаете несколько раз char * и char или int in correct_str:

В:

   if (ne != ' ')

, где ne - это char *

В

   nl = ne;

, где nl - это int и ne a char *

В

   nb = nl + 1;
   ne = nl + 1;

, где nb и ne являются char * и nl an int

Также:

void main ()

main должны вернуть int

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


В заголовке написано "без использования строковых функций", но в reverse_str вы используете strlen , вам нужно заменить

l = strlen(str);

begin_str = str;
end_str = str;

for (i = 0; i < l - 1; i++)
    end_str++;

например

begin_str = str;
end_str = str;

while (*end_str != 0)
  end_str++;

l = end_str - begin_str;
if (l != 0)
  end_str -= 1;
...