我想在不使用字符串函数的情况下反转c中的字符串,还要更正字符串吗?

时间:2019-03-07 12:28:59

标签: c visual-studio-2015

  

//我正在使用Visual Studio,但运行时检查失败#3-T?

     

// str =“你好吗”

     

// reverse_str =“ ouy age woh olleH”

     

// 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 个答案:

答案 0 :(得分:1)

  

//我正在使用Visual Studio,但运行时检查失败#3-T?

您在correct_str中多次混淆了 char * char int

在:

   if (ne != ' ')

其中 ne char *

   nl = ne;

其中 nl int ,而 ne char *

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

其中 nb ne char * ,而 nl 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;