A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 靳小龙 中级黑马   /  2015-9-6 09:32  /  478 人查看  /  0 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

在C语言中,可以通过字符数组存放一个字符串,也可以用字符指针指向一个字符串。

【示例】用字符数组存放一个字符串,然后输出该字符串。
  • #include <stdio.h>
  • int main(){
  •     char string[] = "I love China!";
  •     printf("%s\n", string);
  •     return 0;
  • }


和前面介绍的数组属性一样,string是数组名,它代表字符数组的首地址。

【示例】用字符串指针指向一个字符串。
  • #include <stdio.h>
  • int main(){
  •     char *string = "I love China!";
  •     printf("%s\n", string);
  •     return 0;
  • }


对指向字符变量的指针变量应赋予该字符变量的地址。如:char c, *p=&c;表示p是一个指向字符变量c的指针变量。而:char *s="C Language";则表示s是一个指向字符串的指针变量。把字符串的首地址赋予s。

上例中,首先定义string是一个字符指针变量,然后把字符串的首地址赋予string(应写出整个字符串,以便编译器把它装入一块连续的内存单元)。程序中的:char *string = "I love China!";等效于:char *string;string = "I love China!";
【示例】输出字符串中n个字符后的所有字符。
  • #include <stdio.h>
  • int main(){
  •     char *ps = "This is a good tutorial!";
  •     int n=10;
  •     ps=ps+n;
  •     printf("%s\n", ps);
  •     return 0;
  • }


运行结果为:
good tutorial!

在程序中对ps初始化时,把字符串首地址赋予ps,当ps= ps+10之后,ps指向字符'b',因此输出为 "good tutorial!"。

【示例】在输入的字符串中查找有无‘k’字符。
  • #include <stdio.h>
  • int main(){
  •     char str[20], *ps;
  •     int i;
  •     printf("Input a string: ");
  •     ps = str;
  •     scanf("%s", ps);
  •     for(i=0; ps[i]!='\0'; i++){
  •         if(ps[i]=='k'){
  •             printf("There is a 'k' in the string!\n");
  •             break;
  •         }
  •     }
  •     if(ps[i]=='\0') printf("There is no 'k' in the string\n");
  •     return 0;
  • }


运行结果:
Input a string: thank you
There is a 'k' in the string!

【示例】不使用 strcpy 函数实现字符串的复制。
  • #include <stdio.h>
  • void cpystr(char *pss, char *pds){
  •     while((*pds=*pss)!='\0'){
  •         pds++;
  •         pss++;
  •     }
  • }
  • int main(){
  •     char *pa = "Apple, Samsung, Xiaomi, Smartisan", b[100], *pb;
  •     pb=b;
  •     cpystr(pa, pb);
  •     printf("string a=%s\nstring b=%s\n",pa, pb);
  •     return 0;
  • }


运行结果:
string a=Apple, Samsung, Xiaomi, Smartisan
string b=Apple, Samsung, Xiaomi, Smartisan




0 个回复

您需要登录后才可以回帖 登录 | 加入黑马