C++,codeblocks
如图第四题,定义并用cin>>输入了一个字符数组ch1,但是后续在使用strlen(ch1);return l;(l是之前定义过的字符串长度)的时候报错显示has no effect是为什么
以及请帮帮我,连接后的字符长度一样的时候如何判断连接的单词数?
代码如下,如有帮助,请帮忙采纳一下,谢谢。
#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;
}
你应该先将数组初始化为0,比如
char str[100] = {0};