Algunas precauciones para usar cadenas de lenguaje C

problema de entrada de cadena

Funciones de entrada de cadena:

  1. scanf("%s", str) lee una cadena de caracteres 空格、回车、制表符或EOFcomo delimitadores, espacios, retornos de carro, tabulaciones o EOF no se leerán. Los caracteres después del delimitador se procesan como la siguiente entrada.
  2. gets(str) lee una línea de caracteres, 回车或EOFpensando que el separador, el retorno de carro o el EOF no se leerán.

No puede usar 赋值语句asignar uno 字符串常量o 字符数组asignar directamente a uno 字符数组. El nombre de la matriz de caracteres es una constante de dirección , que no puede cambiar su valor, al igual que el nombre de la matriz numérica no se puede asignar. Las dos líneas siguientes son ilegales:

str1 = "China";
str2 = str1;

Solo 赋值语句se puede 字符asignar uno a uno 字符型变量o 字符数组元素. Entonces, la forma rápida de lograrlo es usar strcpy函数una cadena 复制para otra matriz de caracteres.

Función de copia de cadenas: strcpy(str1, str2) copia la cadena str2 a la matriz de caracteres str1 (incluido '\0'). La posición de la cadena str2 también puede ser uno 字符串常量. Si str2 有效字符dígitos <= str1, será parcial o completo 覆盖. Si el número de caracteres válidos en str2 es mayor que str1, se informará un error.

Función de copia de bits de cadena especificada: strncpy(str1, str2, n) copia los caracteres en la cadena str2 前面n个a la matriz de caracteres str1, 取代los caracteres originales 最前面n个en str1.


problema de longitud de cadena

Cuando inicializamos la matriz de caracteres, hay dos formas de 中括号escribirla 数字:

  1. Escriba números entre corchetes
    A. Los números son iguales al tamaño real: en el sistema 不会在后面加'\0', el número de caracteres es igual al tamaño de la matriz y es igual a los números.
     char str[6] = "abc123";
     char str[6] = {
          
          "abc123"};
     char str[6] = {
          
          'a', 'b', 'c', '1', '2', '3'};
    
    B. El número y el tamaño real no son iguales: el sistema responderá 未初始化元素置'\0'que el número de caracteres no es igual al número y el tamaño de la matriz es igual al número.
    char str[8] = "abc123";                       //"abc123\0\0"
    char str[8] = {
          
          "abc123"};                     //{"abc123\0\0"}
    char str[8] = {
          
          'a', 'b', 'c', '1', '2', '3'}; //{'a','b','c','1','2','3','\0','\0'}
    
  2. No escriba números entre corchetes : el sistema responderá a los dos primeros casos a continuación 自动在末尾加'\0', y el tamaño de la matriz es igual a la cantidad de caracteres 加一. En el tercer caso 不同, la longitud de la matriz es igual al número de caracteres.
    char str[] = "abc123";       //"abc123\0"
    char str[] = {
          
           "abc123" };   //{"abc123\0"}
    
    char str[] = {
          
           'a', 'b', 'c', '1', '2', '3' };
    //故采用该方法定义时,我们一般手动加上'\0',如下:
    //char str[] = { 'a', 'b', 'c', '1', '2', '3', '\0' };
    

La longitud de la cadena en la que generalmente pensamos se refiere al número de caracteres válidos en la matriz de caracteres, por lo que no se incluye '\0'.
Por lo tanto, el uso sizeof()de cálculo 字符数组长度no se puede usar como 字符串长度, por lo que generalmente lo usamos strlen()函数. strlen()函数Determine la posición final de la cadena pasándola '\0'y devuelva la cadena 有效字符个数, calculada 字符串长度.


Otras funciones de cadena

Función de empalme de cadenas: strcat(str1, str2)
convierte la cadena str2 拼接en la cadena str1 后面( 包括'\0'), y coloca el resultado en la matriz de caracteres str1, por lo que el tamaño de la matriz str1 debe cumplir con los requisitos. Después de la llamada a la función, 返回值se obtiene la matriz de caracteres str1 地址.

Función de comparación de cadenas: strcmp(str1, str2)
se usa para 比较str1 y str2 La regla de comparación es comparar las dos cadenas carácter 自左至右por carácter por ASCII码valor hasta que aparezca 不同的字符o se encuentre '\0'. De hecho, cuando usamos esta función, nos preocupa más su 相等resultado, si 全部字符son iguales, las dos cadenas se consideran iguales. En cambio, no le importa quién es más grande que quién, y el tamaño de la cuerda no tiene sentido.

  1. Devuelve 0 si las dos cadenas son iguales.
  2. Si str1>str2, devuelve un entero positivo.
  3. Si str1<str2, devuelve un entero negativo.

Función de conversión de mayúsculas y minúsculas

  1. 大写strlwr(): Convierte las letras de una cadena en 小写letras.
  2. 小写strupr(): Convierte las letras de una cadena en 大写letras.

Supongo que te gusta

Origin blog.csdn.net/jiang1126/article/details/125313912
Recomendado
Clasificación