
C++求助!!!大神们帮帮忙
求出最长字符串程序如下:#include<iostream>usingnamespacestd;voidmain(){inti,j,k=0,l=0,m=0;chara[3...
求出最长字符串程序如下:
#include<iostream>
using namespace std;
void main()
{
int i,j,k=0,l=0,m=0;
char a[3][20];
for(i=0;i<3;i++)
{
cout<<"请输入第"<<i+1<<"个字符串: \n";
cin>>a[i];
}
for(j=0;j<3;j++)
{
while(a[j][k]!='\0')
k++;
cout<<"k="<<k<<endl;
if (l<k)
{
l=k;
m=j;
}
}
cout<<"最长字符串为第"<<m+1<<"个字符串:"<<a[m]<<"\n长度为"<<l<<endl;
}
运行结果怎么是这样啊?
3个字符串分别为 sdfsdf asasdsd saasd 时是错误的
奇迹的是 分别为 beijing tianjin shanghai 时是正确的... 展开
#include<iostream>
using namespace std;
void main()
{
int i,j,k=0,l=0,m=0;
char a[3][20];
for(i=0;i<3;i++)
{
cout<<"请输入第"<<i+1<<"个字符串: \n";
cin>>a[i];
}
for(j=0;j<3;j++)
{
while(a[j][k]!='\0')
k++;
cout<<"k="<<k<<endl;
if (l<k)
{
l=k;
m=j;
}
}
cout<<"最长字符串为第"<<m+1<<"个字符串:"<<a[m]<<"\n长度为"<<l<<endl;
}
运行结果怎么是这样啊?
3个字符串分别为 sdfsdf asasdsd saasd 时是错误的
奇迹的是 分别为 beijing tianjin shanghai 时是正确的... 展开
8个回答
展开全部
已改,看注释
#include<iostream>
using namespace std;
void main()
{
int i,j,k=0,l=0,m=0;
char a[3][20];
for(i=0;i<3;i++)
{
cout<<"请输入第"<<i+1<<"个字符串: \n";
cin>>a[i];
}
for(j=0;j<3;j++)
{
k = 0; //加一句,使k为0
while(a[j][k]!='\0')
k++;
cout<<"k="<<k<<endl;
if (l<k)
{
l=k;
m=j;
}
}
cout<<"最长字符串为第"<<m+1<<"个字符串:"<<a[m]<<"\n长度为"<<l<<endl;
}
单是第一次赋初值是没用的,因为你for后面改变了k的值,因此得到的长度是k再加后面的长度,因此不对,每次给它赋初值得出的才是每个字符串的长度
#include<iostream>
using namespace std;
void main()
{
int i,j,k=0,l=0,m=0;
char a[3][20];
for(i=0;i<3;i++)
{
cout<<"请输入第"<<i+1<<"个字符串: \n";
cin>>a[i];
}
for(j=0;j<3;j++)
{
k = 0; //加一句,使k为0
while(a[j][k]!='\0')
k++;
cout<<"k="<<k<<endl;
if (l<k)
{
l=k;
m=j;
}
}
cout<<"最长字符串为第"<<m+1<<"个字符串:"<<a[m]<<"\n长度为"<<l<<endl;
}
单是第一次赋初值是没用的,因为你for后面改变了k的值,因此得到的长度是k再加后面的长度,因此不对,每次给它赋初值得出的才是每个字符串的长度
展开全部
/*
请输入第1个字符串: break
请输入第2个字符串: goto
请输入第3个字符串: continue
k = 5
k = 4
k = 8
最长字符串为第3个字符串: continue
长度为: 8
Press any key to continue
*/
#include<iostream>
using namespace std;
void main() {
int i,j,k,l = 0,m = 0;
char a[3][20];
for(i = 0;i < 3;i++) {
cout<<"请输入第"<<i + 1<<"个字符串: ";
cin>>a[i];
}
for(j = 0;j < 3;j++) {
k = 0; // 确保每次都是从后第0个字符开始
while(a[j][k] != '\0') k++;
cout<<"k = "<< k << endl;
if (l < k) {
l = k;
m = j;
}
}
cout<<"最长字符串为第"<<m + 1<<"个字符串: "<<a[m]<<"\n长度为: "<<l<<endl;
}
请输入第1个字符串: break
请输入第2个字符串: goto
请输入第3个字符串: continue
k = 5
k = 4
k = 8
最长字符串为第3个字符串: continue
长度为: 8
Press any key to continue
*/
#include<iostream>
using namespace std;
void main() {
int i,j,k,l = 0,m = 0;
char a[3][20];
for(i = 0;i < 3;i++) {
cout<<"请输入第"<<i + 1<<"个字符串: ";
cin>>a[i];
}
for(j = 0;j < 3;j++) {
k = 0; // 确保每次都是从后第0个字符开始
while(a[j][k] != '\0') k++;
cout<<"k = "<< k << endl;
if (l < k) {
l = k;
m = j;
}
}
cout<<"最长字符串为第"<<m + 1<<"个字符串: "<<a[m]<<"\n长度为: "<<l<<endl;
}
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
#include<iostream>
using namespace std;
int main()
{
int i,j,k=0,l=0,m=0;
char a[3][20];
for(i=0;i<3;i++)
{
cout<<"请输入第"<<i+1<<"个字符串: \n";
cin>>a[i];
}
for(j=0;j<3;j++)
{
while(a[j][k]!='\0')
k++;
cout<<"k="<<k<<endl;
if (l<k)
{
l=k;
m=j;
}
k=0;// 这里加一句,每一个for循环都使k归零一次。不然k会累计上一次的数值
}
cout<<"最长字符串为第"<<m+1<<"个字符串:"<<a[m]<<"\n长度为"<<l<<endl;
return 0;
}
using namespace std;
int main()
{
int i,j,k=0,l=0,m=0;
char a[3][20];
for(i=0;i<3;i++)
{
cout<<"请输入第"<<i+1<<"个字符串: \n";
cin>>a[i];
}
for(j=0;j<3;j++)
{
while(a[j][k]!='\0')
k++;
cout<<"k="<<k<<endl;
if (l<k)
{
l=k;
m=j;
}
k=0;// 这里加一句,每一个for循环都使k归零一次。不然k会累计上一次的数值
}
cout<<"最长字符串为第"<<m+1<<"个字符串:"<<a[m]<<"\n长度为"<<l<<endl;
return 0;
}
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
#include<iostream>
using namespace std;
void main()
{
int i,j,l=0,m=0;
char a[3][20];
for(i=0;i<3;i++)
{
cout<<"请输入第"<<i+1<<"个字符串: \n";
cin>>a[i];
}
for(j=0;j<3;j++)
{
int k=0;//把你之前的k定义放到这里来
while(a[j][k]!='\0')
k++;
cout<<"k="<<k<<endl;
if (l<k)
{
l=k;
m=j;
}
}
cout<<"最长字符串为第"<<m+1<<"个字符串:"<<a[m]<<"\n长度为"<<l<<endl;
}
你对的那个完全属于巧合,你for里面的循环k没有归0,它是一直在被继续增加的,巧合是因为你的第一个字符串长度7,第二个也是7,而j=0时k已加到7了。所以j=1时a[j][k]就是从a[1][7]开始,直接就是'\0'结束,所以长度还是7;j=2时,a[2][7]不为空,而你的字符长度为8,正好k可以再加一次,所以是巧合,你的问题就是k要在每次的循环时归零
using namespace std;
void main()
{
int i,j,l=0,m=0;
char a[3][20];
for(i=0;i<3;i++)
{
cout<<"请输入第"<<i+1<<"个字符串: \n";
cin>>a[i];
}
for(j=0;j<3;j++)
{
int k=0;//把你之前的k定义放到这里来
while(a[j][k]!='\0')
k++;
cout<<"k="<<k<<endl;
if (l<k)
{
l=k;
m=j;
}
}
cout<<"最长字符串为第"<<m+1<<"个字符串:"<<a[m]<<"\n长度为"<<l<<endl;
}
你对的那个完全属于巧合,你for里面的循环k没有归0,它是一直在被继续增加的,巧合是因为你的第一个字符串长度7,第二个也是7,而j=0时k已加到7了。所以j=1时a[j][k]就是从a[1][7]开始,直接就是'\0'结束,所以长度还是7;j=2时,a[2][7]不为空,而你的字符长度为8,正好k可以再加一次,所以是巧合,你的问题就是k要在每次的循环时归零
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
第一个字符串:asdf
第二个字符串:asdfgh
第三个字符串:sdfghjjk
k=4//第一个字符串长度
k=6//第二个字符串长度
k=8//第三个字符串长度
最长字符串为第三个
长度为8
有什么问题吗?
第二个字符串:asdfgh
第三个字符串:sdfghjjk
k=4//第一个字符串长度
k=6//第二个字符串长度
k=8//第三个字符串长度
最长字符串为第三个
长度为8
有什么问题吗?
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
K初始化过了是没错,但是你的K是一个循环变量。只在循环体外面赋值的不够的,循环体里面也要初始化。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询