C入门|指针与字符串,读取字符串,字符串库函数举例 C语言入门

欢迎关注笔者,你的支持是持续更博的最大动力

目录
  • 类型(字符串 v.s. 字符数组)
  • 指针和字符串(scanf举例)
  • 库函数举例
  • 相关内容
  • 其他

本文主要讨论:
  • 字符串、字符数组名称的类型
  • 读取整数、字符数组的区别
  • 操作字符串的库函数举例
类型(字符串 v.s. 字符数组)
  • 字符串常量类型:char *
  • 字符数组名称的类型也是 char *
举例
char * word = "Please input your name:"; //"Please input your name:"是字符串常量,类型:char *,可以赋值给char*类型指针wordchar name[20] = "Jack"; //字符数组name,name类型:char * char * p = name; //name可以赋值给char*类型指针pcout << name << endl; //输出: Jack cout << p << endl; //输出: Jack


指针和字符串(scanf举例) 读取键盘输入的字符串:
int main(){ char a[20]; //a类型:char* int n; //n类型:int scanf("%d%s", &n, a); //输入n、a。注:"%d%s":格式控制,%d对应&n,%s对应a:先读入整数,放到地址&n,再读入字符串,放到地址a; printf("%d%s\n", n, a); //输出n、a,换行char b[20]; int m; cin >> m >> b; //输入m、b cout << m << b << endl; //输出m、b,换行return 0; }

解释:scanf 需要知道输入的数据需要存放的地址,因此:
  • &n,得到n的地址 (&:取地址运算符)
  • a是指针,指向数组a的起始地址
scanf("%d%s", &n, a) 意思就是:先读入整数,放到地址&n;再读入字符串,放到数组a地址。
关于cin和cout为什么读入、输出整数和字符数组是一样的,请看这篇:输出运算符<<对char*的重载。


库函数举例 大部分与字符串操作相关的库函数,所需的参数类型都是char*的。
使用前提,包含头文件
# include

举例
#include int main(){ char s1[100] = "12345"; char s2[100] = "abcdefg"; char s3[100] = "ABCDE"; strncat(s1, s2, 3); //把s2前三个字符黏贴到s1尾部,\0挪到c后面 cout << "1) " << s1 << endl; //1) 12345abc strncpy(s1, s3, 3); //如果s3的长度大于要拷贝的字节数,把s3前三个字符拷贝到s1里面,s1=“ABC45abc” cout << "2) " << s1 << endl; //2) ABC45abc strncpy(s2, s3, 6); //如果s3的长度小于要拷贝的字节数,s3的\0也会拷贝到s2里面,s2 =“ABCDE“ cout << "3) " << s2 << endl; //3) ABCDE cout << "4) " << strncmp(s1, s3, 3) << endl; //4) 0比较s1 s3前三个字符,相等输出0//strtok char str[] = "- I, am , pretty."; //给定字符串str p = strtok(str, " ,.-"); //把给定字符串的单词分离出来; " ,.-":用来分隔的字符(第一个字符是空格) while (p != NULL){//只要p不为NULL,就说明找到了一个子串(单词) cout << p << endl; //输出子串 p = strtok(NULL, " ,.-"); //后续调用,第一个参数必须是NULL } return 0; }

输出结果:
1) 12345abc 2) ABC45abc 3) ABCDE 4) 0 I am pretty


相关内容
  • 什么是指针、内存地址和空指针
  • 指针相关:交换两个变量的值(图解)
  • 一维数组、二维数组与指针(reverse函数举例)
  • 不同类型数组输出所有元素区别,输出运算符<<对char*的重载,输出字符数组地址
  • void指针是什么、区别、作用(memset,memcpy函数举例)
其他 【C入门|指针与字符串,读取字符串,字符串库函数举例 C语言入门】日常vlog: 点这里去B站~



    推荐阅读