problema de entrada de cadena
Funciones de entrada de cadena:
- scanf("%s", str) lee una cadena de caracteres
空格、回车、制表符或EOF
como delimitadores, espacios, retornos de carro, tabulaciones o EOF no se leerán. Los caracteres después del delimitador se procesan como la siguiente entrada. - gets(str) lee una línea de caracteres,
回车或EOF
pensando 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 数字
:
- 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.
B. El número y el tamaño real no son iguales: el sistema responderáchar str[6] = "abc123"; char str[6] = { "abc123"}; char str[6] = { 'a', 'b', 'c', '1', '2', '3'};
未初始化元素置'\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'}
- 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.
- Devuelve 0 si las dos cadenas son iguales.
- Si str1>str2, devuelve un entero positivo.
- Si str1<str2, devuelve un entero negativo.
Función de conversión de mayúsculas y minúsculas
大写
strlwr(): Convierte las letras de una cadena en小写
letras.小写
strupr(): Convierte las letras de una cadena en大写
letras.