C/C++常见问题
1. %c与%s的区别
1.) %c 用于输出单个字符,它后面需要跟一个参数,表示要输出的字符。
例如,printf("%c", 'a'); 将会输出字符 'a'。
2.) %s 用于输出以 null 结尾的字符串,它后面需要跟一个参数,表示要输出的字符串(即 char 类型的数组名称)。
例如,char str[] = "hello"; printf("%s", str); 将会输出字符串 "hello"。
3.) 需要注意的是,在使用 %s 输出字符串时,数组的最后一个元素必须是 null 字符('\0'),这样才能正确地识别字符串的结尾。如果没有在数组的末尾显式添加 null 字符,则应该手动在数组的末尾添加一个 null 字符,例如 char str[] = {'h', 'e', 'l', 'l', 'o', '\0'};。
# 另外,在使用 %s 输出字符串时,也可以限定输出的字符数。
例如,printf("%.3s", "hello"); 将会输出字符串 "hel",因为它只输出了前三个字符。
# 总之,%c 用于输出单个字符,而 %s 用于输出字符串。
2. c&&c++问号的用法
(a > b) ? a : b 是 C 语言中的条件运算符(也称为三元运算符),它用于根据某个条件选择两个不同的值。其语法格式如下:
(condition) ? (value_if_true) : (value_if_false)
其中,condition 是要测试的条件,如果该条件为真,则返回 value_if_true;
否则,返回 value_if_false。
在 (a > b) ? a : b 中,条件是 a > b,如果该条件为真,则返回 a,否则返回 b。这行代码等效于以下的 if 语句:
if (a > b) {
return a;
} else {
return b;
}
但是,条件运算符更简洁,通常可以提高代码的可读性和可维护性。
3. str转化int
在C语言中,可以使用标准库函数 atoi() 或 strtol() 将字符串转换为整数类型。
使用 atoi() 函数: atoi() 函数将一个表示整数的字符串转换为对应的整数值
#include <stdio.h>
#include <stdlib.h>
int main() {
char str[] = "1234";
int num = atoi(str);
printf("Converted integer: %d\n", num);
return 0;
}
在上述示例中,我们将一个表示整数的字符串 "1234" 传递给 atoi() 函数,并将其返回的整数值存储在 num 变量中。最后,通过 printf() 函数打印转换后的整数。
需要注意的是,如果字符串不能完全解析为合法的整数,或者超出了 int 类型的范围,atoi() 函数可能会导致不可预测的结果。
使用 strtol() 函数: strtol() 函数除了能够将字符串转换为整数外,还提供了更多的错误处理功能。
#include <stdio.h>
#include <stdlib.h>
int main() {
char str[] = "1234";
char* endptr;
long num = strtol(str, &endptr, 10);
if (*endptr != '\0') {
printf("Invalid input.\n");
} else {
printf("Converted integer: %ld\n", num);
}
return 0;
}
在上述示例中,我们使用 strtol() 函数将字符串 "1234" 转换为长整数类型,并将其存储在 num 变量中。同时,我们还提供了一个指向字符指针 endptr 的参数,用于检查是否发生了转换错误。如果 endptr 不指向空字符,表示转换过程中存在非法字符,说明输入不是有效的整数。
需要注意的是,strtol() 函数可以处理更广泛的整数类型(如 long 或 long long),并且提供了更多的错误处理能力,因此在某些情况下可能更为可靠。
4.循环遍历 2D 阵列
不废话上例子:
#include <stdio.h>
int main() {
int matrix[2][3] = { {1, 4, 2}, {3, 6, 8} };
int i, j;
for (i = 0; i < 2; i++) {
for (j = 0; j < 3; j++) {
printf("%d\n", matrix[i][j]);
}
}
return 0;
}
这是一个使用二维数组打印矩阵元素的程序,其中定义了一个2行3列的二维数组matrix,并初始化了其元素值,然后使用嵌套的for循环遍历二维数组,打印出每个元素的值。程序的输出结果是:
1 4 2 3 6 8
这表示按行优先的顺序打印了矩阵matrix中的所有元素值。
5.字符串的遍历
我常会想字符串历遍是不是和数组遍历一样,于是我去尝试用相同的思想写发现出错误
后来查了资料发现在c或者c++字符串是以空字符('\0')结尾.我也不废话看代码
#include <stdio.h>
int main() {
char str[] = "hello";
int i;
for(i = 0; str[i] != '\0'; ++i) {
printf("%c ", str[i]);
}
return 0;
}
这段代码的功能是打印字符串"hello"中的每个字符,包括最后一个空字符'\0'之前的所有字符。首先定义了一个字符数组str,并初始化为"hello",然后使用for循环遍历该数组,直到遇到字符'\0'才停止循环,每次迭代输出当前遍历到的字符,最后返回0表示程序正常结束。注意,在C语言中,字符串以空字符'\0'结尾,因此需要检查每次遍历到的字符是否等于'\0'来确定循环何时结束。
ok今天的分享就这样.
本文作者:2c237c6
本文链接:https://www.cnblogs.com/27dCnc/p/18568714
版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步