注册 登录
编程论坛 C++教室

计算机为什么会这么这样??

lemonandtree 发布于 2017-12-07 13:45, 1280 次点击
照片中第五题,我自己写的代码
程序代码:
#include<iostream>
using namespace std;
const int N=5;
void f(char(*p)[20],char*q);
void main()
{
    char str[N][20],(*p)[20]=str;
    char*ptfind="c++";
    int i;
    for(i=0;i<N;i++)
        gets(*(p+i));
    f(str,ptfind);
}
void f(char(*p)[20],char*q)
{
    int j;
    for(j=0;j<N;j++)
        if(*(p+j)[0]==*q)
            cout<<"找到了"<<endl;
        else
          cout<<"没找到"<<endl;
    for(j=0;j<N;j++)
        cout<<*(p+j)[0]<<endl;
}
我的问题是为什么
if(*(p+j)[0]==*q)
我只取每行的一个字符与“c++“比较也能输出找到了,我把输出结果截了屏。
只有本站会员才能查看附件,请 登录
只有本站会员才能查看附件,请 登录
4 回复
#2
rjsp2017-12-07 14:07
我只取每行的一个字符与“c++“比较也能输出找到了
怎么啦?!但你的算法不合题意,题目要求找到相同的字符串,而非第一个字符相同就可以。
比如你输入“cshit”,你的代码输出的是“找到了”

另外,非常严重的是,你得换本书了。
就你这代码去面试,别人失败了还能得到一个“下次有机会再合作”,而你的代码被面试官看到了,肯定是个“滚”,不说二字。

程序代码:
#include<iostream>           // #include <iostream>
using namespace std;
const int N=5;               // const size_t N = 5;
void f(char(*p)[20],char*q); // void f( const char (*)[20], const char* q );
void main()                  // int main( void )
{
    char str[N][20],(*p)[20]=str;
    char*ptfind="c++";       // const char* ptfind = "c++";
    int i;                   // 删除,并入下句
    for(i=0;i<N;i++)         // for( size_t i=0; i!=N; ++i )
        gets(*(p+i));        // gets早就被标准废弃了,使用 fgets
    f(str,ptfind);
}

#3
lemonandtree2017-12-07 16:38
谢谢你指出我的毛病,首先我想请问是我写的代码烂是因为书的问题吗?我是一名大一计算机系新生,这本书是学校的教材
只有本站会员才能查看附件,请 登录
同时您有什么推荐吗?然后我本来是把
if(*(p+j)[0]==*q)
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cout<<"找到了"<<endl;
中的[0]去掉的,但这样会报错,报错显示表示出一行的字符数组也就是去掉[0]之后的类型和*q的不匹配,这我就弄不明白了?
#4
rjsp2017-12-08 08:10
回复 3楼 lemonandtree
if(*(p+j)[0]==*q)
改为
if( strcmp(p[j],q) == 0 )
#5
lemonandtree2017-12-08 08:40
知道了,谢谢。
1