博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
c语言字符串实例
阅读量:6333 次
发布时间:2019-06-22

本文共 4275 字,大约阅读时间需要 14 分钟。

例子:涉及字符串、字符、指针、++等

例一:字符串与字符

#include 
void reverse(char *str){ char *end=str; printf("%c\n",*str); //结果是a //printf("%s",*str); //以字符串输出,有错误 printf("%s\n",str); //这样输出字符串是对的 printf("%c\n",*end); printf("%s\n",end); printf("%c\n",*str+1); //结果是b }int main(){ reverse("abcdef"); return 0;}

 例二:统计字符串单词的个数【如何去掉空格的问题】

#include "stdio.h"  int count_word(char *str); void main(){    char str1[80];   int sum=0;     puts("please enter a string");   gets(str1);    sum=count_word(str1); //返回的count就是sum    printf("there are %d words in this sentence",sum); }   int count_word(char *str) {     int count,flag;     char *p;     count=0;     flag=0;      p=str;       while(*p!='\0')/*当字符串没有到结尾的时候,重头到尾的循环*/       {         if(*p==' ')/*假如字符串遇到空格,就将flag清零,同时可以过滤掉多余的空格*/         flag=0;         else if(flag==0)/*当字符串不是空格时,假如flag为0,那么计算器加1,既是遇到空格后的第一个字符时*/         {           flag=1;/*将flag标记回1,这样在遇到第一个字符后的字符时可以将他过滤掉,直到遇到空格时,在清零*/           count++; //count就是统计单词数的变量。其实就是单词数的第一个字符,后面的字符都没有统计了           }           p++; //继续加一。没有遇到空格的时候 。直到继续遇到空格或结尾的时候,才不加一了。          }      return count;     }

 例三:字符串反转

#include 
void reverse(char *str){ char *z=str; char *end=str; char tmp; if(str) { while(*end) { ++end; } --end; //回退一个,找到null while(str < end) { tmp = *str; *str++ = *end; *end--=tmp; } } printf("%s",z); }int main(){ char s[]="1234546"; reverse(s);//上面两句,如果直接这么写 reverse("123456789"); 就会有一个报警错误 return 0;}

 例四:字符串长度

#include 
void reverse(char *p){ if( *p=='\0') return ; reverse(p+1); printf("%c",*p); }int main(){ reverse("abcdefghjklmn");//为4 printf("%d",sizeof("abc"));//为3 printf("%d",strlen("abc")); printf("\n"); return 0; }

例五:字符串反转【用递归和指针的方式】

#include 
void reverse(char *p){ if( *p=='\0') return ; reverse(p+1); printf("%c",*p); }int main(){ reverse("abcdefghjklmn"); printf("\n"); return 0; }

 例六:统计字符串中每个单词的频率

#include "stdio.h"#include "stdlib.h"#include "string.h"int main(){int i=0,t,dc=0,zm[26];char a[100];for(i=0;i<26;i++)zm[i]=0;gets(a);i=0;while(a[i]!='\0'){ if(a[i]!=' ')    {
while(a[i]>' ' ) {zm[a[i]-'a']++;i++;} dc++;}else i++;} for(i=0;i<26;i++)if(zm[i]>0)printf("\n%c出现了%d次\t",i+'a',zm[i]);printf("\n共有单词%d个\n",dc); system("pause");}

 例七:字符串长度与字符串在内存的长度

#include "stdio.h"int main(){    char str[6]="ABC";    char a[]="Program";        char *ptr="ABC";    printf("str = \"%s\"\n",str);    printf("%d\n",strlen(a));//长度就是长度,sizeof是内存中的长度 。所以下面那个是6,这个是7     printf("%d\n",sizeof(a));//碰到第一个\0前面 ,并把\0计算在内。         printf("%d\n",strlen(str));        printf("%d\n",sizeof(str)); //根据初始化的6来定          printf("%d\n",sizeof(ptr));//碰到第一个\0前面 ,并把\0计算在内。              printf("ptr=\"%s\"\n",ptr);    return 0;}

 例八:在c语言中,字符串作为字符数组来考虑

#include "stdio.h"int main(){       char a[]="Program";        char b[]={
'p','r','o','g','r','a','m'};//在c语言中,将字符串作为字符数组来处理。(c++中不是) char c[]="'p','r','o','g','r','a','m'"; printf("%d\n",strlen(a)); printf("%d\n",sizeof(a)); printf("%d\n",strlen(b)); printf("%d\n",sizeof(b));// \0可以不要,相当于上面的数组初始化写死了,后面没有\0作为结束标记 printf("%d\n",strlen(c)); printf("%d\n",sizeof(c)); return 0;}

 例九:如何存放字符串

在C语言中,可以用两种方法表示和存放字符串:

(1)用字符数组存放一个字符串
          char str[ ]="I love China";
(2)用字符指针指向一个字符串
          char* str="I love China";
对于第二种表示方法,有人认为str是一个字符串变量,以为定义时把字符串常量"I love China"直接赋给该字符串变量,这是不对的。
C语言对字符串常量是按字符数组处理的,在内存中开辟了一个字符数组用来存放字符串常量,程序在定义字符串指针变量str时只是把字符串首地址(即存放字符串的字符数组的首地址)赋给str。
两种表示方式的字符串输出都用
printf("%s\n",str);
%s表示输出一个字符串,给出字符指针变量名str(对于第一种表示方法,字符数组名即是字符数组的首地址,与第二种中的指针意义是一致的),则系统先输出它所指向的一个字符数据,然后自动使str自动加1,使之指向下一个字符...,如此,直到遇到字符串结束标识符 " \0 "。

例十:截取字符串并依次输出

#include "stdio.h"void AllSubstring(const char *str,int high){    int i, j, k;    if(!str)        return;for(i=0;i<=high;i++){    for(j=i; j<=high;j++)    {        for(k = i; k<=j; k++)            printf("%c", str[k]);        printf("\t");    }     printf("\n");    }}int main(void) {    AllSubstring("abcde",4);    return 0;}

 

转载于:https://www.cnblogs.com/bluewelkin/p/4063265.html

你可能感兴趣的文章
敏捷个人:通过实践TOGAF来思考如何学习并应用新的方法?
查看>>
Android系统的开机画面显示过程分析(6)
查看>>
vivo Hi-Fi+QQ音乐 数字音乐市场的一剂良方
查看>>
Cocos2d-x 3.2 异步动态加载 -- 保卫萝卜开发总结
查看>>
聚焦触宝反侵权事件:中国创业者用什么护航海外市场大门
查看>>
AOP技术基础
查看>>
Android系统进程间通信(IPC)机制Binder中的Server启动过程源代码分析(2)
查看>>
无线802.11n 2.4G与5G性能测试
查看>>
子域名信息收集攻略
查看>>
[Android]开发数独游戏思路分析过程
查看>>
SpreadJS 类Excel表格控件 - V12 新特性详解
查看>>
理解并取证:IPv6与IPv4在报文结构上的区别
查看>>
EOS主网上线只是开始,如何运营决定未来
查看>>
不用Visual Studio,5分钟轻松实现一张报表
查看>>
(译)如何使用cocos2d和box2d来制作一个Breakout游戏:第一部分
查看>>
计算机图形学(一) 图形系统综述
查看>>
持续集成(CI)- 几种测试的区别(摘录)
查看>>
多用户虚拟Web3D环境Deep MatrixIP9 1.04发布
查看>>
求高手,求解释
查看>>
[MSSQL]NTILE另类分页有么有?!
查看>>