Disporre un argomento: stringa contro matrice?

2

Vero o falso: una stringa è la stessa cosa di una matrice.

Ho avuto un'intervista l'altro giorno e la domanda di cui sopra è stata fatta. Ho detto falso, ma l'intervistatore ha detto che in realtà era vero. Le ho spiegato che una stringa è un tipo di dati e un array è un oggetto che contiene più istanze di una variabile e che non sono nemmeno concetti simili. Ma era una persona delle risorse umane che stava solo leggendo domande tecniche che le erano state consegnate, quindi non poteva elaborare o riferirsi al mio punto.

Un collaboratore in seguito ha spiegato la vera risposta affermando che una stringa è in realtà una matrice di caratteri ... quindi, una stringa è una matrice. Ora, se una stringa è una matrice di caratteri, ciò non significa che gli array di documenti o gli array di numeri interi si qualificano come stringhe. Quindi, una stringa non è la stessa cosa di una matrice.

Ma anche così, (considerando C #) una stringa non è nemmeno un array di caratteri. Per poter manipolare i caratteri su una stringa (senza usare i metodi di concatenazione), devi convertire la stringa in un array di caratteri. Ora, se una stringa era sinonimo di matrice di caratteri, perché dovresti convertirla? Non saresti in grado di chiamare implicitamente ogni carattere nella stringa come faresti con un array di caratteri? No! Perché? Perché una stringa non è un array di caratteri!

L'ho paragonato a chiedere "Una chiave primaria è uguale a un identificatore univoco?" La risposta è falsa. Motivo: una chiave primaria è un identificatore univoco, ma puoi avere identificatori univoci in una tabella senza impostarli come chiavi. Che ne pensate? Una stringa (tipo di dati) è la stessa cosa di un array (tipo di oggetto)? Se sì, perché?

    
posta Shonenknife 27.09.2013 - 02:06
fonte

6 risposte

13

La domanda è una domanda sciocca senza qualificazione. Senza specificare la lingua nella domanda originale, non c'è modo di conoscere la risposta desiderata.

Se la domanda era "è l'implementazione predefinita di una stringa, una matrice in C", la risposta sarebbe "sì". Se la domanda era "è una stringa sempre un array", la risposta è no, poiché una stringa può essere implementata in un numero qualsiasi di modi, incluso ma non limitato a un array di byte o un elenco di caratteri collegati. Anche in C #, una stringa può essere nullo, che NON è un array.

Il problema qui è che al reclutatore è stata fornita una domanda che avrebbero dovuto chiedere, aspettandosi una risposta binaria. Non c'è stata l'opportunità di chiarire quale fosse la domanda.

In queste circostanze la mia risposta sarebbe stata:

"Una stringa in C # non è una matrice, ma è molto probabilmente implementata utilizzando una matrice di caratteri sottostante, dipende da molti fattori e l'implementazione può essere diversa a seconda dell'implementazione del compilatore. Sarebbe perfettamente valida per l'autore del compilatore creare un'implementazione di stringa come elenco di caratteri collegati. "

    
risposta data 27.09.2013 - 03:05
fonte
6

Beh certo che non sono la stessa cosa, nello stesso modo in cui un gatto non è lo stesso di un cane perché entrambi sono mammiferi e un granchio non è un ragno anche perché entrambi sono di phylum arthropoda; anche se ho avuto insegnanti che dicevano ai miei figli il secondo, rendendo così necessaria una lezione di papà sull'evoluzione, la classificazione biologica delle specie e l'importanza di non affidarsi mai a fonti singole - e sì, anche papà può sbagliarsi, ecco come si usa Google.

Ma sto divagando ...

Che una "stringa" non è la stessa di una "matrice" (e una "Stringa" non è la stessa di una "Matrice", e mix-match), tanto che sia stata solo una brutta domanda (succede), o era un subdolo ; vale a dire, vedere come qualcuno risponde a qualcuno che non è corretto su qualcosa, logica sciatta, "essere solo una persona delle risorse umane", ecc. La base delle risorse umane è Psicologia industriale / organizzativa (o "psicologia del lavoro" meno formalmente e soprattutto intorno Europa), e come doppio specialista in Psicologia, vi assicuro che ci sono poche cose più interessanti per lo studente di psicologia comune rispetto all'osservazione di come le persone rispondono a stimoli inattesi.

Poteva essere una domanda sciocca, ovviamente, o era un trucco davvero semplice vedere come qualcuno si occupa di qualcuno che non considera tecnicamente incline a tentare di valutare la risoluzione del conflitto, la comunicazione, le abilità interpersonali / di squadra, temperamento, fiducia in se stessi, ecc. Alcune persone si indignano, insulta, condiscendente, falsamente gradevole, troppo sicuro di sé, estremamente autocosciente e non sicuro ... YMMV. Nessuna persona ragionevole avrebbe buttato fuori un candidato perché si era perso un trucco / una domanda sbagliata come questa, ma avrebbe assolutamente buttato fuori qualcuno che rispondeva in modo particolarmente scarso - o raccomandava qualcuno per le sue eccellenti capacità comunicative per gestirlo con grazia.

Non bisogna mai presumere di sapere con chi stanno parlando davvero, e ogni momento è un invito a mostrare i tuoi KSAO: Conoscenze, Abilità, Abilità e Altre Caratteristiche. Ovviamente l'intervista ha sempre dimostrato di essere uno dei metodi meno efficaci per le assunzioni - in genere peggiore delle scelte basate sui curricula ciechi e della verifica di riferimento da solo - ma chi ascolta comunque gli psicologi? :)

Tecnicamente parlando ...

In C # .NET 4.5 Framework a String è una classe di sistema, ereditato da System.Object, che è costituito principalmente da due pezzi di dati - una lunghezza di un array interno e una matrice di caratteri Unicode.

Un array, d'altra parte, eredita anche da System.Object e espone la funzionalità per gestire matrici di molte varietà.

Mentre 'string' è un alias per String in C #, oltre ad essere un concetto di programmazione relativamente fondamentale e una struttura dati, 'array' è solo una struttura di concetti e dati e appare in C # solo come una classe Array di grandi lettere ed efficacemente aliasato con parentesi invece di una semplice parola chiave.

Si potrebbe quindi dire che una "stringa" è un tipo (o implica un'implementazione) di un array, ma:

String! = Array

QED

    
risposta data 27.09.2013 - 05:20
fonte
0

In parole semplici:

  • La maggior parte delle lingue implementa le stringhe come matrici di byte.
  • Potrebbe non essere vero per tutte le lingue, ma sospetto che la maggior parte di esse lo faccia.

Wikipedia:

A string is generally understood as a data type and is often implemented as an array of bytes (or words) that stores a sequence of elements, typically characters, using some character encoding.

Dici:

But even so, (considering C#) a string isn't even a character array. In order to do character manipulation on a string (without using concatenation methods), you have to convert the string to a character array.

Ma ciò non è vero in altre lingue, ad esempio, in Java non è necessario convertirli in un array di caratteri.

Java Doc:

For example:

     String str = "abc";

is equivalent to:

     char data[] = {'a', 'b', 'c'};
     String str = new String(data);

È chiaro che in Java una stringa è un wrapper attorno a un array di caratteri.

    
risposta data 27.09.2013 - 02:22
fonte
0

Anche se la domanda è infondata senza ulteriori informazioni, si può sostenere che dal punto di vista della programmazione C, una matrice deve ridursi alla memoria consecutiva e anche le stringhe fanno lo stesso.

    
risposta data 27.09.2013 - 04:48
fonte
0

Sicuramente IMO "falso". Sebbene .NET string sia effettivamente implementato utilizzando la struttura dei dati dell'array (e non è uguale al tipo Array ), è possibile solo assumere quello. Senza guardare il codice sorgente di string lo so per certo. E anche se lo so per certo, risponderei ancora "Falso" perché non puoi usare

char[] charStr = { 'h', 'e', 'l', 'l', 'o', '
char[] charStr = { 'h', 'e', 'l', 'l', 'o', '%pre%' };
string trueStr = "hello";
' }; string trueStr = "hello";

allo stesso modo.

Questa domanda può essere definita come "Vero" se è stato chiesto come "La stringa è, molto probabilmente, implementata internamente utilizzando la struttura dei dati dell'array". Perché nella forma iniziale ( Una stringa è la stessa cosa di un array ), può ancora essere considerata falsa anche in C.

    
risposta data 27.09.2013 - 05:24
fonte
-1

Vero e falso. A seconda di come pronunci la domanda.

L'introduzione di un linguaggio di programmazione inizia a combinare concetti e tipi effettivi . Un array ad esempio è entrambi questi, il modo in cui vengono implementati può introdurre differenze (è un array basato sul vettore? O è basato su array? ... ma un "vettore" come concetto è una specializzazione di un array)

Quindi, dipende davvero dalla domanda che stai chiedendo.

    
risposta data 27.09.2013 - 02:19
fonte

Leggi altre domande sui tag