1. 程式人生 > >父串中子串的個數!!

父串中子串的個數!!

#include<stdio.h>
#include<string.h>


#define MAX 100//巨集定義字串長度為100;
int main()
{
char fat[MAX];//定義父串;
char sub[MAX];//定義子串;


int i = 0;//定義迴圈變數;
int j = 0;
int count = 0;

int fat_len = 0;//定義字元陣列長度;
int sub_len = 0;

printf("請輸入一段字串(父串):\n");
scanf("%s",fat);//輸入陣列(父串)fat;


printf("請輸入一段字串(子串):\n");
scanf("%s",sub);//輸入陣列(子串)sub;


printf("您輸入的父串為:\n");
puts(fat);//將fat輸入的字串輸出到終端;


printf("您輸入的子串為:\n");
puts(sub);//將sub輸入的字串輸出到終端;

fat_len = strlen(fat);//使用strlen函式讀fat裡面的字串長度賦值給fat_len;
sub_len = strlen(sub);

for(i = 0;i < fat_len;i++)//若i小於字串長度,i++;
{
for(j = 0;j < sub_len;j++)//若j小於字串長度,j++;
{
if(fat[i] == sub[j])//如果字串內第一個元素相等比較下一個;
{
i++;
j++;
}
else //如果不相等則i繼續執行迴圈sub元素變為第一個,即sub的第一個元素與新的fat元素比較;
{
j = 0;
break;//跳出其所在迴圈;
}
if(j == sub_len - 1)//若每一個元素都相同,字串長度為j的值那麼說明sub在fat中有一個子串;
{
count++;
}
}
}
printf("父串中的子串數是:\n%d\n",count);


return 0;

}

fat_len = strlen(fat);//使用strlen函式讀fat裡面的字串長度賦值給fat_len;

sub_len = strlen(sub);

這個strlen函式必須在scanf後面因為如果你寫在前面那麼會導致沒有長度,那麼進行到下一步時就會沒有長度那麼如果你下面需要用到長度的時候,就不會產生你想要的結果;

if語句執行的時候,是一個一個執行的即判斷第一個if後

無論什麼結果都會繼續進行下一個if語句,就是說這兩個語句存在遞進關係;

如果想用選擇的語句,用switch比較好;

puts(字元陣列):

作用是將一個字串(以‘\0’結束的字元序列)輸出到終端;

gets:

從終端輸入一個字串到字元陣列,並得到一個函式值;目的是向字元陣列輸入一個字串,而不大關心其函式值;