Preguntas de práctica sobre strings

La string es un tema importante desde el punto de vista del examen GATE. Discutiremos los puntos clave de las strings, así como diferentes tipos de preguntas basadas en eso. Hay dos formas de almacenar strings como una array de caracteres (char p[20]) o un puntero que apunta a una string (char* s = “string”), a las cuales se puede acceder como arrays. Suponiendo que p es una array de caracteres y s es un puntero que apunta a una string, los siguientes son los puntos clave:

  • El operador sizeof(p) dará la memoria asignada a la array de caracteres. Sin embargo, sizeof(s) dará el tamaño del puntero que es independiente de la string apuntada por p.
  • Cada string se adjunta con un carácter nulo (‘\0’) que representa el final de la string.
  • La longitud de la string se puede calcular usando la función strlen(). Sin embargo, la función no incluye el carácter nulo ‘\0’ en la longitud. Por ejemplo, strlen(s) devolverá 6.
  • Un solo carácter de las strings se puede imprimir como:
printf(“%c”, s[0]);
printf(“%c”, p[1]);
  • La string completa se puede imprimir como:
printf(“%s”, s);
printf(“%s”, p);
  • Como p es una array de caracteres, sus elementos individuales pueden modificarse (p[i] = ‘c’). Sin embargo, al usar s (un puntero a una string), los elementos individuales de la string no se pueden modificar.
  • Como s es un puntero, también se puede apuntar a cualquier otra string (s = «string2»). Sin embargo, usando p, no es posible.

Discutamos algunos problemas basados ​​en los conceptos discutidos: 

Que – 1. ¿Qué imprime el siguiente fragmento de programa C?

char c[] = "GEEK2018";
char *p =c;
printf("%c,%c", *p,*(p+p[3]-p[1]));

(A) G, 1 (B) G, K (C) GEEK2018 (D) Ninguno de los anteriores 

Solución: como se indica en la pregunta, p apunta a la array de caracteres c[] que se puede representar como:11 

Como p es un puntero de tipo carácter, *p imprimirá ‘G’ Usando aritmética de punteros, *(p+p[3]-p[1]) = *(p+75-69) (Usando valores ascii de K y E) = *(p+6) = 1(como sabemos que p contiene la dirección de la string base significa la string de posición 0, supongamos que la dirección de la string comienza con 2000, por lo que p+6 significa la dirección de p(estamos agregando 6 en 2000 eso significa 2006, y en 2006 se guarda el “1” por eso la respuesta es 1) por lo tanto la salida será G, 1. 

Que – 2. ¿Cuál de los siguientes fragmentos de código C no es válido? (A) char* p = “string1”; printf(“%c”, *++p); (B) char q[] = “string1”; printf(“%c”, *++q); (C) char* r = “string1”; imprimirf(“%c”, r[1]); (Re. Ninguna de las anteriores 

Solución: La opción (A) es válida ya que p es un puntero que apunta al carácter ‘s’ de «string1». Usando ++p, p apuntará al carácter ‘t’ en «string1». Por lo tanto, *++p imprimirá ‘t’. La opción (B) no es válida ya que q siendo la dirección base de la array de caracteres, ++q (dirección base creciente) no es válida. La opción (C) es válida ya que r es un puntero que apunta al carácter ‘s’ de «string1». Por lo tanto,

r[1] = *(r+1) = ‘t’ and it will print ‘t’.

Que – 3. Considere el siguiente segmento del programa C: (GATE CS 2004)

char p[20];
char *s = "string";
int length = strlen(s);
int i;
for (i = 0; i < length; i++)
     p[i] = s[length — i];
printf("%s",p);

La salida del programa es: (A) gnirts (B) gnirt (C) string (D) no se imprime ninguna salida 

Solución: en el código dado, p[20] se declara como una array de caracteres y s es un puntero que apunta a una string. La longitud se inicializará a 6. En la primera iteración del bucle for (i = 0),

 12 

p[i] = s[6-0] y s[6] es ‘\0’ Por lo tanto, p[0] se convierte en ‘\0’. Como se discutió, ‘\0’ significa el final de la string. Por lo tanto, no se imprime nada ya que el primer carácter de la string es ‘\0’. 

Que – 4. ¿Qué imprime el siguiente fragmento de programa C?

char c[] = "GATE2011";
char *p =c;
printf("%s", p + p[3] - p[1]) ;

(A) PUERTA2011 (B) E2011 (C) 2011 (D) 011 

Solución: como se indica en la pregunta, p apunta a la array de caracteres c[] que se puede representar como:13 

Como p es un puntero de tipo carácter, usando aritmética de punteros, p + p[3] – p[1] = p + 69 – 65 (Usando valores Ascii de A y E) = p + 4 Ahora, p + 4 apuntará a 2, se imprimirá la string que comienza desde 2 hasta ‘\0’, que es 2011.

Publicación traducida automáticamente

Artículo escrito por GeeksforGeeks-1 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *