Domanda

Ho scritto un app in C; si aspetta due linee in ingresso. Primo ingresso dice quanto grande un array di int sarà e il secondo ingresso contiene valori separati da spazi. Ad esempio, il seguente ingresso

5
1 2 3 4 99

dovrebbe creare un contenente {1,2,3,4,99} array

Qual è il modo più veloce per farlo? Il mio problema è quello di leggere più numeri senza scorrendo l'intera stringa controllare se si tratta di uno spazio o di un numero?

Grazie.

È stato utile?

Soluzione

int i, size;
int *v;
scanf("%d", &size);
v = malloc(size * sizeof(int));
for(i=0; i < size; i++)
    scanf("%d", &v[i]);

Ricordate di free(v) dopo si è fatto!

Inoltre, se per qualche motivo avete già i numeri in una stringa, è possibile utilizzare sscanf()

Altri suggerimenti

Ecco un esempio tratto da http://www.cplusplus.com/reference/cstring / strtok / che ho adattato al nostro contesto.

Si divide la catena str in catene sotto e poi convertire ogni parte in un int. Mi aspetto che la riga di introduzione è numeri separati da virgole, nient'altro. La dimensione è la dimensione della matrice. Si dovrebbe fare scanf ( "% d", & dimensioni); come Denilson affermato nella sua risposta. Alla fine, si ha l'array int con tutti i valori.

int main(){
  int size = 5, i = 0;
  char str[] ="10,20,43,1,576";
  int list[size];
  char * pch;
  printf ("Splitting string \"%s\" into tokens:\n",str);
  pch = strtok (str,",");
  list[i] = atoi(pch);
  i++;
  while (pch != NULL)
  {
    pch = strtok (NULL, ",");
    if(pch != NULL)
      list[i] = atoi(pch);
    i++;
  }

  for(i=0;i<size;i++){
    printf("%d. %d\n",i+1,list[i]);
  }
  return 0;
}

Qui 'N' è il numero di elementi array di array 'A'

int N, A[N];
printf("Input no of element in array A: ");
scanf("%d", &N);
printf( "You entered: %d\n", N);
printf("Input array A elements in one line: ");
for(int i=0; i<N; i++){
   fscanf(stdin, "%d", &A[i]);
   printf( "A[%d] is: %d\n", i, A[i]);
}

scanf() è una specie di dolore al collo. Scopri strtol() per questo tipo di problema, che renderà la vostra vita molto facile.

Questo codice si avvale di un approccio dritto in avanti di lettura di ogni personaggio attraverso getchar (). Andiamo su a leggere un certo numero util troviamo un indice space.The vuoto 'i' della matrice viene aggiornato dopo that.This viene ripetuto fino a fine riga ( '\ n') si incontra

#include<iostream>
main()
{
  char ch;
  int arr[30] ;
  ch =getchar();
  int num = 0;
  int i=0;
  while(ch !='\n')
  {
    if(ch == ' ')
    { 
      arr[i] = num;
      i++;
      num = 0;
    }
    if(((ch -48) >=0) && (ch-48 <=9))
      num = (num*10) + (ch - 48);
    ch = getchar();   
  }
  arr[i] = num;
  for(int j=0;i<=i;j++)
     std::cout<<arr[i]<<" ";
 }
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top