PDA

Visualizza la versione completa : [C]Confronto tra una singola stringa e quella di una matrice


Xx.Killua.xX
27-05-2013, 13:18
Salve ragazzi!
Ho una domanda per voi.. spero mi possiate aiutare!
Scrivendo un programma mi si è presentato il problema di dovere confrontare una singola stringa[M] e quella di una matrice[N][M].
Penso di dovere utilizzare la funzione strcmp ma non so indicare la stringa facente parte della matrice.
Passo i dati dal main ad un'altra funzione:


insert_product(char list_products[][M],float list_prices[],int n,int m,char new_product[],float price_new_product) |
{ |
é necessaria?
...

if(strcmp(list_products[i][????],new_product[m])!=0)
|
|
devo precisarla? e se si come?
}
.....

Vi ringrazio in anticipo!
Ps. Sono alle prime armi perciò siate più chiari di me chiari per piacere xD.

oregon
27-05-2013, 14:36
Semplicemente così

if(strcmp(list_products[i], new_product)!=0)

Xx.Killua.xX
27-05-2013, 20:42
Mi da errore.
Ti posto l'intero programma sperando tu abbia il tempo di dargli un'occhiata.
Si intende realizzare un programma che riempi o modifichi il listino di un supermercato o roba del genere.


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

#define N 20+1 /* Il nome del prodotto e' al massimo composto da 20 caratteri. */
#define M 10+1 /* E' possibile inserire nel listino a massimo 10 prodotti */

int insert_product(char list_products[][M],float list_prices[],int n,int m,char new_product[],
float price_new_product);

void print_all(char list_products[][M],float list_prices[],int n,float mean_of_prices,float max_price);

int main()
{
char list_products[N][M],new_product[M];
float list_prices[N];
float price_new_product,max_price=0,mean_of_prices=0;
int i,x,y;
char c;

/* Inizializzo il vettore relativo a prezzi a -2: listino prodotti vuoto. */
for(i=0;i<N;i++) {
list_prices[i]=-2; }

/* Elenco delle possibili azioni. */
printf("E' permesso all'utente svolgere tre diverse operazioni.\n");
printf("1.Inserimento di un nuovo prodotto e relativo prezzo;\n");
printf("2.stampa elenco dei prodotti e dei relativi prezzi;\n");
printf("3.uscita dal programma.\n");

printf("L'utente proceda con la scelta.\n");
scanf("%d",&x);

while(getchar() != '\n'); /* Svuoto il buffer da tastiera. */

switch(x) {

case 1:

printf("Si digiti il nome del prodotto.\n");

for(i=0;i<M;i++) {
c=getchar();
if(c=='\n') {
break; }
else {
new_product[i]=c; }
}
new_product[i]='\0';

printf("Il prodotto che si vuole inserire nel listino e'\n>>");
puts(new_product);

printf("Si immetta il prezzo da assegnagli.\n");
scanf("%f",&price_new_product);
printf("Il prezzo scelto da attribuire al prodotto e' %.2f.\n",price_new_product);

y = insert_product(list_products,list_prices,N,new_pro duct,M,price_new_product);

if(y==0)
printf("Il prodotto e' gia' presente nel listino.\n");

if(y==1)
printf("Il prodotto e' stato inserito nel listino.\n");

if(y==2)
printf("Nel listino non vi sono più spazi disponibili.\n");

case 2:

printf("Si è scelto di spampare a video il listino dei prodotti e dei relativi prezzi.\n");
print_all(list_products,list_prices,N,mean_of_pric es,max_price);

case 3:

printf("Si e' scelto di chiudere il programma.\n");
exit(0);

default:
printf("Operazione non prevista.\n");
}


return 0;
}

insert_product(char list_products[][M],float list_prices[],int n,int m,char new_product[],float price_new_product)
{
int i,j;
int x;
int empty_space;

for(j=0;j<n;j++) {

if(list_prices[j]==-2) {
empty_space=1; }
else {
empty_space=0; }
}

if(empty_space==1) {
printf("Nel listino vi sono spazi disponibili per l'inserimento.\n");

for(i=0;i<n;i++) {

if(strcmp(list_products[i],new_product)==0) {
return 0; }

if(strcmp(list_products[i],new_product)!=0) {
for(i=0;i<n;i++) {
if(list_prices[i]==-2) {
list_prices[i]=price_new_product;
strcpy(list_products[i],new_product); }
}
return 1;
}

}
}
else{
return 2; }


}

print_all(char list_products[][M],float list_prices[],int n,float *mean_of_prices,float *max_price)
{
int i;

for(i=0;i<n;i++) {
if(list_prices[i]!=0) {
printf("Prodotto: %s | Prezzo: %.2f",list_products[i],list_prices[i]);
}
}


}

MItaly
27-05-2013, 20:47
Benvenuto sul forum! :) Ti ricordo che il codice va specificato tra tag
... , altrimenti perde l'indentazione.

Inoltre, scrivere "mi da errore" non vuol dire niente... specifica che errore ottieni e su che linea, in modo da non costringere chi ti sta aiutando a salvare il programma e compilarlo per darti una mano.

Per i tag CODE correggo io, in futuro imposta correttamente la discussione fin da subito; nel frattempo ti consiglio di dare un'occhiata al regolamento (http://forum.html.it/forum/showthread.php?s=&threadid=973887).
:ciauz:

MItaly
27-05-2013, 20:57
In ogni caso, venendo al tuo codice, compilandolo ottengo i seguenti errori:

13862334.cpp: In function ‘int main()’:
13862334.cpp:58:87: error: invalid conversion from ‘char*’ to ‘int’ [-fpermissive]
13862334.cpp:8:5: error: initializing argument 4 of ‘int insert_product(char (*)[11], float*, int, int, char*, float)’ [-fpermissive]
13862334.cpp:58:87: error: invalid conversion from ‘int’ to ‘char*’ [-fpermissive]
13862334.cpp:8:5: error: initializing argument 5 of ‘int insert_product(char (*)[11], float*, int, int, char*, float)’ [-fpermissive]
13862334.cpp: At global scope:
13862334.cpp:87:114: error: ISO C++ forbids declaration of ‘insert_product’ with no type [-fpermissive]
13862334.cpp:126:99: error: ISO C++ forbids declaration of ‘print_all’ with no type [-fpermissive]

mi paiono tutti piuttosto chiari (almeno, rispetto alla media dei messaggi di un compilatore C++ :D ):

gli errori relativi alla riga 58 indicano semplicemente che stai sbagliando a passare i parametri alla insert_product, confronta quello che stai passando con il prototipo dichiarato all'inizio...
gli ultimi due errori indicano che, al momento di definire le funzioni insert_product e print_all, non hai specificato il tipo restituito (rispettivamente int e void, come da prototipi).

Loading