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

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

目录

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

本文主要讨论:

  • 字符串、字符数组名称的类型
  • 读取整数、字符数组的区别
  • 操作字符串的库函数举例

类型(字符串 v.s. 字符数组)

  • 字符串常量类型:char *
  • 字符数组名称的类型也是 char *

举例

char * word = "Please input your name:";   //"Please input your name:"是字符串常量,类型:char *,可以赋值给char*类型指针word

char name[20] = "Jack";  //字符数组name,name类型:char *
char * p = name;         //name可以赋值给char*类型指针p

cout << 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函数举例)

其他

日常vlog: 点这里去B站~


你可能感兴趣的:(C入门,字符串,指针,c语言,正则表达式)