c语⾔字符串实例例⼦:涉及字符串、字符、指针、++等
例⼀:字符串与字符
#include <stdio.h>
void reverse(char *str)
{
char *end=str;
printf("%c\n",*str); //结果是a
//printf("%s",*str); //以字符串输出,有错误
printf("%s\n",str); //这样输出字符串是对的
printf怎么输出字符printf("%c\n",*end);
printf("%s\n",end);
printf("%c\n",*str+1); //结果是b
}
int main()
{
reverse("abcdef");
return0;
}
例⼆:统计字符串单词的个数【如何去掉空格的问题】
#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 <stdio.h>
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"); 就会有⼀个报警错误return0;
}
例四:字符串长度
#include <stdio.h>
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");
return0;
}
例五:字符串反转【⽤递归和指针的⽅式】
#include <stdio.h>
void reverse(char *p)
{
if( *p=='\0')
return ;
reverse(p+1);
printf("%c",*p);
}
int main()
{
reverse("abcdefghjklmn");
printf("\n");
return0;
}
例六:统计字符串中每个单词的频率
#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");
}
例七:字符串长度与字符串在内存的长度
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);
return0;
}
例⼋:在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));
return0;
}
例九:如何存放字符串
在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");
}
}
AllSubstring("abcde",4); return0;
}
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论