c語言尋找指定字串的程式(程式利用指標完成封裝)
阿新 • • 發佈:2018-12-14
一定要注意註釋了*的位置 我除錯了好久才發現自己沒有分配內訓
指標定義完一定要記得三選一
1.去null了 2.分配記憶體 3.指向特定的位置
還有就是宕機基本本質上都跟錯誤的操作記憶體有關
還有就是關於字串的輸出問題
首先下面的是正確的但是可以發現這樣寫編譯器會自動輸出指標指向的位置之後這個字元陣列(字串)的所有字元
#include <stdio.h> #include <string.h> int main(void) { char *str1 = "Borland International", *str2 = "nation", *ptr; ptr = strstr(str1, str2); printf("The substring is: %s\n", ptr); return 0; }
下面的寫法直接宕機
#include <stdio.h>
#include <string.h>
int main(void)
{
char *str1 = "Borland International", *str2 = "nation", *ptr;
ptr = strstr(str1, str2);
printf("The substring is: %s\n", *ptr);
return 0;
}
因為*ptr是指向字元陣列的一個字元所以強制字串輸出就會宕機
不封裝的程式
#include<stdlib.h> #include<string.h> #include<stdio.h> int find(); find() { int num = 0; int i; char str[128]; char xCh; printf("請輸入:"); scanf("%s",&str[0]); printf("請輸入需要查詢的字串:"); fflush(stdin); scanf("%c",&xCh); for(i = 0;i < 128;i++) { if(str[i] == xCh) { printf("出現在:%d\n",i+1); num++; } } printf("共出現%d次",num); return num; } int main() { while(1) { find(); system("pause"); system("cls"); } return 0; }
下面先看封裝好的尋找字元的程式
#include<stdlib.h> #include<string.h> #include<stdio.h> int find(char * str , char * xCh , int * count); int find(char * str , char * xCh , int * count) { char * p1 = str; char * p2 = xCh; int i = 0 , tmpcount = 0; if(str == NULL||xCh == NULL) { return -1; } for(i = 0;i < 128;p1++,i++) { if(*p1 == *p2) { printf("出現在:%d\n",i+1); tmpcount++; } } *count = tmpcount; return 0; } int main() { while(1) { int ret = 0; char str[128]; char * xCh = (char*)malloc(sizeof(1));//* int count = 0; printf("請輸入:"); fflush(stdin); scanf("%s",&str[0]); printf("請輸入需要查詢的字元:"); fflush(stdin); scanf("%c",xCh); ret = find(str , xCh , &count); if(ret != 0) { printf("erro(%d)",ret); } printf("%c共出現%d次",*xCh,count); system("pause"); system("cls"); } return 0; }
下面再看封裝好的尋找指定字串的函式(利用strstrwhile模型)
#include<stdlib.h>
#include<string.h>
#include<stdio.h>
int find(char * str , char * xCh , int * count);
int find(char * str , char * xCh , int * count)
{
char * p1 = str;
char * p2 = xCh;
int i = 0 , tmpcount = 0;
if(str == NULL||xCh == NULL)
{
return -1;
}
do
{
p1 = strstr(p1,p2);
if(p1 != NULL)
{
tmpcount++;
p1++;
}
else
{
break;
}
}while(*p1 != '/0');
*count = tmpcount;
return 0;
}
int main()
{
while(1)
{
int ret = 0;
char str[128];
char xCh[128];
int count = 0;
printf("請輸入:");
fflush(stdin);
scanf("%s",str);
printf("請輸入需要查詢的字元:");
fflush(stdin);
scanf("%s",xCh);
ret = find(str , xCh , &count);
if(ret != 0)
{
printf("erro(%d)",ret);
}
printf("%c共出現%d次",*xCh,count);
system("pause");
system("cls");
}
return 0;
}