c语言字符串实例

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

例一:字符串与字符

#include <stdio.h>
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 <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"); 就会有一个报警错误
    return 0;
}

 例四:字符串长度

#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");
    return 0;    
    
}

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

#include <stdio.h>
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;
}

 

posted @ 2014-10-30 17:31  kin2321  阅读(5549)  评论(0编辑  收藏  举报