关于#字符串#的问题,如何解决?(语言-c语言)

字符数组 str,通过 gets 输入一行任意的字符串,
1)请计算字符串长度,以及 sizeof(str),并打印输出
2)请把该字符串按照 ASCII 码重新排序,并输出 3)请输入一个字串,并在该字符串中查询它的位置。注:如果找不到,输出-1

遍历字符统计长度(或者strlen计算长度)sizeof()计算的是数组的大小,如果数组定义为char str[1000],sizeof(str)就是1000。
运行结果:

img

代码:

#define _CRT_SECURE_NO_WARNINGS 1

#include <stdio.h>
#define MAXLEN 1000
//计算长度
int length(const char* p)
{
    int n = 0;
    while (p[n] != '\0')
        n++;
    return n;
}

//查找字串的位置,如果找不到输出-1
int findStr(char* big, char* sml)
{
    int i = 0, j = 0;
    for (i = 0;  big[i] != '\0'; i++)
    {
        for (j = 0; sml[j] != '\0'; j++)
        {
            if (big[i + j] != sml[j])
                break;
        }
        if (sml[j] == '\0')
            return i;
    }
    return -1;//没有找到
}

int main()
{
    char str[MAXLEN] = { 0 }, tmp[MAXLEN] = { 0 };
    char sub[MAXLEN] = { 0 };
    int i, j, t;
    int len = 0;
    int pos = -1;
    printf("请输入一个字符串:\n");
    gets_s(str);
    len = length(str);

    //TMP保留str的原始内容,以便查找字串
    for (i = 0; str[i] != '\0'; i++)
        tmp[i] = str[i];
    tmp[i] = 0;

    printf("字符串长度:%d\n", len);
    printf("sizeof(str):%d\n", sizeof(str));
    //按ASCII排序并输出
    for (i = 0; i < len - 1; i++)
    {
        for (j = 0; j < len - 1 - i; j++)
        {
            if (str[j] > str[j + 1])//按ASCII码从小到大排序
            {
                t = str[j];
                str[j] = str[j + 1];
                str[j + 1] = t;
            }
        }
    }
    //输出排序后的
    printf("按ASCII从小到大排序后的字符串:%s\n", str);
    //输入并查找字串
    printf("请输入一个字串:\n");
    gets_s(sub);
    pos = findStr(tmp, sub);
    printf("字串位置:%d\n", pos);//输出字串位置
    return 0;
}

您好,我是有问必答小助手,您的问题已经有小伙伴帮您解答,感谢您对有问必答的支持与关注!
PS:问答VIP年卡 【限时加赠:IT技术图书免费领】,了解详情>>> https://vip.csdn.net/askvip?utm_source=1146287632