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;
}

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM