C/C++常见问题

本文介绍了C语言中%c和%s的区别,条件运算符(c++&&++)的应用,以及如何使用atoi()和strtol()进行字符串转int。此外,还涵盖了二维数组遍历和字符串遍历,强调了C语言中字符串以空字符结束的特点。
摘要由CSDN通过智能技术生成

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今天的分享就这样.

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值