结构数组里面的strstr字符数组 [英] strstr char array inside struct array

查看:267
本文介绍了结构数组里面的strstr字符数组的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我定义为一个结构;

 结构播放器{    INT没有,年龄;    焦炭名[20];}玩家[10];

阵列从文件填满。我尝试做的是,以来自用户的输入,添加输入字符数组,将其发送至搜索(字符查找[])功能和的strstr 名称字段中的一个循环。

编辑:对不起,我纠正了订单。我想在一个循环中的strstr。

 的char * p =的strstr(玩家[X] .name和inputFromUser);

P 总是空。我怎样才能做到这一点?

在此先感谢。

编辑 - $ C $下加入...

 的#include<&stdio.h中GT;
#包括LT&;&stdlib.h中GT;
#包括LT&;&unistd.h中GT;
#包括LT&;&string.h中GT;结构播放器{    INT没有,年龄;    焦炭名[20];}玩家[20];无效fillstruct(字符*);
无效搜索(的char []);INT主(INT ARGC,CHAR *的argv [])
{
    INT ARG;
    INT℃;
    INT D组;
    INT I = 0;    所以char a [100];
    字符*文件名= NULL;    而((ARG = getopt的(ARGC,ARGV,F:))= - 1)
    {
        开关(ARG)
        {
            案例'F':
                文件名= OPTARG;
                fillstruct(文件名);
                打破;
            默认:
                打破;
        }
    }
    而((C =龟etc(标准输入))!= EOF)
    {
        如果(C!= 10)
        {
            一个由[i] = C;
            我++;
        }
        其他
        {
            一个由[i] ='\\ 0';
            搜索(一);
            I = 0;
        }
    }
    返回0;
}无效搜索(一个烧焦[])
{
    INT I = 0;
    INT关口;
    INT发现= 0;
    的char * p = NULL;
    而((I小于20)及​​及(发现== 0))
    {
        P =的strstr(一,玩家[I]。名称);
        如果(p)的
        {
            COL = P-A;
            的printf(\\ nPlayer%s于%s的..找到索引中找到:%d个,一个玩家[I] .name和COL);
            找到= 1;
        }
        其他
        {
            的printf(\\ NP =%个=%s的播放器[%D]。。名称=%S,P,A,I,玩家[我]。名称);
        }
        我++;
    }
}无效fillstruct(字符*姓名)
{
    FILE * FP;
    焦线[100];
    INT I = 0;    FP = FOPEN(姓名,R);
    如果(FP == NULL)
    {
        出口(1);
    }    而(与fgets(行,100,FP)!= NULL)
    {
        玩家[I]。无= I;
        的strcpy(玩家[I] .name和线);
([I]。名称标准输出,\\ nplayer =%S中,玩家)fprintf中;
        玩家[I]。年龄= 20;
        我++;
    }
    FCLOSE(FP);
}


解决方案

与fgets 存储 \\ n ,然后停止服用输入。

因此​​,假设一个球员的名字是用户玩家[我]。名称将等于用户\\ n,而 A 用户

于是返回的strstr 总是 NULL

试试这个:

  P =的strstr(玩家[I] .name和一个);

OR,删除 \\ n 通过从文件输入后与fgets

 而(与fgets(行,100,FP)!= NULL)
{
    玩家[I]。无= I;
    的strcpy(玩家[I] .name和线);
    玩家[我]。名称[strlen的(球员[我]。名称)-1] ='\\ 0'; //添加此行
    ([I]。名称标准输出,\\ nplayer =%S中,玩家)fprintf中;
    玩家[I]。年龄= 20;
    我++;
}

I have a struct defined as;

struct player {

    int no, age;

    char name[20];  

} players[10];

Array is filled from file. What I try to do is, take input from user, add input to char array, send it to search(char lookup[]) function and strstr name field in a loop.

EDİT: Sorry I corrected the order. I'm trying to strstr in a loop.

char *p = strstr(players[x].name, inputFromUser);

but p is always null. How can I do this?

Thanks in advance.

EDIT - Code Added...

#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <string.h>

struct player {

    int no, age;

    char name[20];  

} players[20];

void fillstruct(char *);
void search(char []);

int main(int argc, char *argv[])
{
    int arg;
    int c;        
    int d;           
    int i=0;        

    char a[100];
    char *filename = NULL;

    while((arg=getopt(argc, argv, "f:"))!=-1)
    {
        switch(arg)
        {
            case 'f':
                filename = optarg;
                fillstruct(filename);
                break;
            default:
                break;
        }
    }   
    while((c=fgetc(stdin))!=EOF)
    {
        if(c!=10)
        {
            a[i]=c;
            i++;
        }       
        else
        {
            a[i]='\0';
            search(a);      
            i=0;            
        }       
    }
    return 0;
}

void search(char a[])
{
    int i=0;
    int col;
    int found=0;
    char *p =NULL;
    while((i<20)&&(found==0))
    {
        p = strstr(a, players[i].name);
        if(p)
        {
            col = p-a;
            printf("\nPlayer '%s' found in '%s'.. Found index: %d", a, players[i].name, col);
            found=1;
        }   
        else
        {
            printf("\np=%s a=%s player[%d].name=%s", p, a, i, players[i].name);
        }
        i++;
    }   
}

void fillstruct(char *name)
{
    FILE *fp;
    char line[100];
    int i=0;

    fp = fopen(name, "r");
    if(fp==NULL)
    {   
        exit(1);
    }

    while(fgets(line, 100, fp)!=NULL)
    {
        players[i].no=i;
        strcpy(players[i].name, line);
fprintf(stdout, "\nplayer=%s", players[i].name);
        players[i].age=20;
        i++;
    }   
    fclose(fp); 
}

解决方案

fgets stores the \n and then stops taking input.

So suppose a player name is "user", players[i].name will be equal to "user\n" while a is "user".

So return of strstr is always NULL.

Try this instead:

p = strstr(players[i].name,a);

OR, remove the \n after taking input from file by fgets:

while(fgets(line, 100, fp)!=NULL)
{
    players[i].no=i;
    strcpy(players[i].name, line);
    players[i].name[strlen(players[i].name)-1]='\0'; //add this line
    fprintf(stdout, "\nplayer=%s", players[i].name);
    players[i].age=20;
    i++;
} 

这篇关于结构数组里面的strstr字符数组的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
相关文章
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆