985Five 2021-10-27 22:27 采纳率: 100%
浏览 20
已结题

strlen如何使用以及请帮我解解题目

img

C++,codeblocks
如图第四题,定义并用cin>>输入了一个字符数组ch1,但是后续在使用strlen(ch1);return l;(l是之前定义过的字符串长度)的时候报错显示has no effect是为什么
以及请帮帮我,连接后的字符长度一样的时候如何判断连接的单词数?

  • 写回答

2条回答 默认 最新

  • 关注

    代码如下,如有帮助,请帮忙采纳一下,谢谢。

    img

    #include <iostream>
    #include <string>
    using namespace std;
    
    struct stnode
    {
        char buf[100];
        int cnt;
    };
    
    int main()
    {
        char s[10][11];
        stnode node[10];
        char tmp[12];
        int nmb =0;
        
        int k = 0,i,j;
        
        while(1)
        {
            cin >> s[nmb];
            nmb++;
            if(cin.get() == '\n')break;
        }
        //按字符长度排序
        for ( i=0;i<nmb-1;i++)
        {
            for ( j =  0;j<nmb-i-1;j++)
            {
                if(strlen(s[j]) > strlen(s[j+1]))
                {
                    memset(tmp,0,sizeof(tmp));
                    memcpy(tmp,s[j],strlen(s[j]));
                    memset(s[j],0,sizeof(s[j]));
                    memcpy(s[j],s[j+1],strlen(s[j+1]));
                    memset(s[j+1],0,sizeof(s[j+1]));
                    memcpy(s[j+1],tmp,strlen(tmp));
                }
            }
        }
        memset(node[0].buf,0,101);
        memcpy(node[0].buf,s[0],strlen(s[0]));
        node[0].cnt = 1;
        i=1;
        k = 0;
        while(i<nmb)
        {
            if(strlen(s[i]) == strlen(s[i-1]))
            {
                memcpy(node[k].buf+strlen(node[k].buf),s[i],strlen(s[i]));
                node[k].cnt +=1;
            }
            else
            {
                k++;
                memset(node[k].buf,0,101);
                memcpy(node[k].buf+strlen(node[k].buf),s[i],strlen(s[i]));
                node[k].cnt =1;
            }
            i++;
        }
        
        //对拼接后的字符排序
        for ( i = 0;i<k;i++)
        {
            for( j = 0;j<k-i;j++)
            {
                if (strlen(node[j].buf) > strlen(node[j+1].buf) )
                {
                    stnode tt = node[j];
                    node[j] = node[j+1];
                    node[j+1] = tt;
                }else if (strlen(node[j].buf) > strlen(node[j+1].buf))
                {
                    if(node[j].cnt < node[j+1].cnt)
                    {
                        stnode tt = node[j];
                        node[j] = node[j+1];
                        node[j+1] = tt;
                    }
                }
            }
        }
    
        //cout << "Output: ";
        for ( i = 0;i<=k;i++)
        {
            cout << node[i].buf << " ";
        }
        return 0;
    }
    
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

问题事件

  • 系统已结题 11月5日
  • 已采纳回答 10月28日
  • 修改了问题 10月27日
  • 创建了问题 10月27日

悬赏问题

  • ¥15 在获取boss直聘的聊天的时候只能获取到前40条聊天数据
  • ¥20 关于URL获取的参数,无法执行二选一查询
  • ¥15 液位控制,当液位超过高限时常开触点59闭合,直到液位低于低限时,断开
  • ¥15 marlin编译错误,如何解决?
  • ¥15 有偿四位数,节约算法和扫描算法
  • ¥15 VUE项目怎么运行,系统打不开
  • ¥50 pointpillars等目标检测算法怎么融合注意力机制
  • ¥20 Vs code Mac系统 PHP Debug调试环境配置
  • ¥60 大一项目课,微信小程序
  • ¥15 求视频摘要youtube和ovp数据集