查找字符串向量中是否存在字符串

时间:2015-07-03 20:14:03

标签: c vector struct comparison

下午好,

我怀疑我无法克服,而且我尝试了很多方法。我正在做一个程序,除其他外,用户必须输入有关序列号必须唯一且类型为char的产品的数据。发生的事情是,当我输入第一个产品序列号时,程序返回已经是具有此序列号的产品,尽管它是第一个。

这是我的代码:

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

typedef struct
{
    char numeroserie;
    char descricao;
    float preco;
} stProduto;
/********************** Funcoes dos produtos *************************/
void inserirProduto(stProduto produtos[], int *contadorProdutos);
int procurarNumeroserie(stProduto produtos[], int contadorProdutos, char produtoAProcurar);

int main()
{
    stProduto produtos[500];
    int contadorProdutos=0;
    inserirProduto(produtos,&contadorProdutos);
    return 0;
}
void inserirProduto(stProduto produtos[], int *contadorProdutos)
{
    char string1;
    char posicao;
    do
    {
        printf("Introduza o numero de serie do produto:");
        scanf("%s",&string1);
        posicao =  procurarNumeroserie(produtos,*contadorProdutos, string1);
        if (posicao == 0)
        {
            printf("Ja existe um produto com esse numero de serie!!!\n");
        }
    }
    while(posicao == 0);
    strcpy(produtos[*contadorProdutos].numeroserie,string1);
    (*contadorProdutos)++;
}
int procurarNumeroserie(stProduto produtos[], int contadorProdutos, char produtoAProcurar)
{
   int i;
    char posicao;
    posicao = 0;
    for(i = 0 ; i < contadorProdutos ; i++)
    {
        if (strcmp(produtos[i].numeroserie, produtoAProcurar) == 0)
        {
            posicao=i;
            i=contadorProdutos;
        }
    }
    return posicao;
}

有人请帮助!!我已经感到沮丧。

由于

2 个答案:

答案 0 :(得分:0)

你弄错了,char不是c中的字符串类型,它是一个整数类型。

字符串定义为非nul的字节序列,后跟nul字节。

它们类型char是1个字节,因此字符串可以是char的数组,如下所示

char string[6] = {'H', 'e', 'l', 'l', 'o', '\0'};
/*                                           ^ nul: it's mandatory 
 *                                             for this to be a 
 *                                             string 
 */

上面发布的代码似乎是Java,最初有一些修复程序可以让它编译,但是如果启用编译warnigs,编译器会真的让你生气。

你可以像我上面那样从数组构建一个字符串,或者使用char的指针,在这种情况下你需要指向一个数组或使用malloc()分配的动态内存。

一个例子是

char *hello;
hello = malloc(6);
if (hello == NULL)
    return ERROR; /* or whatever is need but do not continue */
strcpy(hello, "Hello");
/* do whatever you want with hello */
free(hello);

答案 1 :(得分:0)

我设法让我去工作:

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

typedef struct
{
    char numeroserie[9];
    char descricao;
    float preco;
} stProduto;
/********************** Funcoes dos produtos *************************/
void inserirProduto(stProduto produtos[], int *contadorProdutos);
int procurarNumeroserie(stProduto produtos[], int contadorProdutos, char produtoAProcurar[9]);

int main()
{
    stProduto produtos[500];
    int contadorProdutos=0;
    inserirProduto(produtos,&contadorProdutos);
    return 0;
}
void inserirProduto(stProduto produtos[], int *contadorProdutos)
{
    char string1[9];
    char posicao;
    do
    {
        printf("Introduza o numero de serie do produto:");
        scanf("%s",&string1);
        posicao =  procurarNumeroserie(produtos,*contadorProdutos, string1);
        if (posicao == 0)
        {
            printf("Ja existe um produto com esse numero de serie!!!\n");
        }
    }
    while(posicao == 0);
    strcpy(produtos[*contadorProdutos].numeroserie,string1);
    (*contadorProdutos)++;
}
int procurarNumeroserie(stProduto produtos[], int contadorProdutos, char produtoAProcurar[9])
{
   int i;
    char posicao;
    posicao = 0;
    for(i = 0 ; i < contadorProdutos ; i++)
    {
        if (strcmp(produtos[i].numeroserie, produtoAProcurar) == 0)
        {
            posicao=i;
            i=contadorProdutos;
        }
    }
    return posicao;
}

使用numeroserie [8]我确保用户只插入8个字符??

由于