2016 C語言面試題——字串函式的實現
2016 C語言面試題——字串函式
前言:最近準備找工作了,所以需要做一些準備。先從基本的字串函式的實現開始。如果有發現什麼問題或有什麼疑惑,請及時評論。
strcat
/*************************************************************************
> File Name: strcat.c
> Author: AnSwEr
> Mail: [email protected]
> Created Time: 2015年10月07日 星期三 20時08分29秒
************************************************************************/
/*
* 連線字串
*/
#include<stdio.h>
char *my_strcat(char *dest,const char *src)
{
char *temp = dest;
const char *s = src;
while(*temp != '\0')
temp++;
while((*(temp++) = *(s++)) != '\0');
temp = '\0';
return dest;
}
int main(void)
{
char dest[] = "he";
const char src[] = "llo";
printf("%s\n",my_strcat(dest,src));
return 0;
}
strchr
/*************************************************************************
> File Name: strchr.c
> Author: AnSwEr
> Mail: [email protected]
> Created Time: 2015年10月07日 星期三 19時55分12秒
***** *******************************************************************/
/*
* 查詢字串中字元c第一次出現的位置
*/
#include<stdio.h>
#include<assert.h>
char *my_strchr(const char *str,int c)
{
assert(str);
const char *p = str;
while(*p)
{
if(*p == c)
{
return p;
}
p++;
}
return NULL;
}
int main(void)
{
char str[] = "abcd";
printf("%c\n",*my_strchr(str,'b'));
return 0;
}
strlen
/*************************************************************************
> File Name: strlen.c
> Author: AnSwEr
> Mail: [email protected]
> Created Time: 2015年08月15日 星期六 16時24分06秒
************************************************************************/
/*
*strlen的實現
*/
#include<stdio.h>
unsigned int my_strlen(const char * str)
{
const char *tmp = str;
int i;
for(i=0;*tmp++ != '\0';i++);
return i;
}
int main(void)
{
char string[]= "answer";
printf("%d\n",my_strlen(string));
return 0;
}
strcpy
/*************************************************************************
> File Name: strcpy.c
> Author: AnSwEr
> Mail: [email protected]
> Created Time: 2015年10月07日 星期三 16時11分34秒
************************************************************************/
#include<stdio.h>
#include<assert.h>
#include<stdlib.h>
char *my_strcpy(char *dest,const char *src)
{
if(dest == src)
{
return dest;
}
assert(dest != NULL);
assert(src != NULL);
char *temp = dest;
while((*(dest++) = *(src++)) != '\0');
return temp;
}
int main(void)
{
const char src[] = "answer nihao";
char *dest = (char *)malloc(sizeof(src));
printf("%s\n",my_strcpy(dest,src));
return 0;
}
memcpy
/*************************************************************************
> File Name: memcpy.c
> Author: AnSwEr
> Mail: [email protected]
> Created Time: 2015年10月07日 星期三 16時20分44秒
************************************************************************/
#include<stdio.h>
#include<stdlib.h>
#include<assert.h>
void *my_memcpy(void *dest,const void *src,size_t n)
{
if(n <= 0)
{
return NULL;
}
assert(dest != NULL);
assert(src != NULL);
void *temp = dest;
while(n--)
{
*(char *)(dest++) = *(char *)(src++);
}
return temp;
}
int main(void)
{
const char src[]="answer nihao";
char *dest = (char *)malloc(sizeof(src));
printf("%s\n",(char *)my_memcpy(dest,src,sizeof(src)));
return 0;
}
memmove
/*************************************************************************
> File Name: memmove.c
> Author: AnSwEr
> Mail: [email protected]
> Created Time: 2015年10月07日 星期三 16時54分18秒
************************************************************************/
#include<stdio.h>
#include<stdlib.h>
#include<assert.h>
void *my_memmove(char *dest,const char *src,size_t n)
{
if(n == 0)
{
return NULL;
}
assert(dest != NULL);
assert(src != NULL);
const char *a = src;
char *b = dest;
if(src >= dest || (src + n) <= dest)
{
while(n--)
{
*(b++) = *(a++);
}
}
else
{
a += n;
b += n;
while(n--)
{
*(b--) = *(a--);
}
}
return dest;
}
int main(void)
{
char s[] = "hello";
printf("%s\n",(char *)my_memmove(s,s+1,sizeof(s)-1));
return 0;
}
loopmove
/*************************************************************************
> File Name: loopmove.c
> Author: AnSwEr
> Mail: [email protected]
> Created Time: 2015年10月07日 星期三 20時16分09秒
************************************************************************/
/*
* 迴圈右移
*/
#include<stdio.h>
#include<string.h>
#define MAX 256
void loopmove(char * str,int steps)
{
char tmp[MAX];
int len = strlen(str) - steps;
memmove(tmp,str+len,steps);
memmove(str+steps,str,len);
memmove(str,tmp,steps);
}
int main(void)
{
char str[] = "123456";
loopmove(str,2);
printf("%s\n",str);
return 0;
}
del_cp
/*************************************************************************
> File Name: del_cp.c
> Author: AnSwEr
> Mail: [email protected]
> Created Time: 2015年10月07日 星期三 19時27分49秒
************************************************************************/
/*
* 刪除字串中的a,並複製b。
*/
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
int main(void)
{
char s[] = "aabcbba";
int i,j;
int n = 0,count = 0;
int len = strlen(s);
for(i=0;i<len;i++)
{
if(s[i] != 'a')
{
s[n++] = s[i];
}
if(s[i] == 'b')
{
count++;
}
}
s[n] = '\0';
int newlen = count + n;
s[newlen] = 0;
/*倒序複製,不會打亂字串順序*/
for(i=newlen-1,j=n-1;j>=0;j--)
{
s[i--] = s[j];
if(s[j] == 'b')
{
s[i--] = s[j];
}
}
printf("%s\n",s);
return 0;
}
01swap
/*************************************************************************
> File Name: 01swap.c
> Author: AnSwEr
> Mail: [email protected]
> Created Time: 2015年10月07日 星期三 12時40分43秒
************************************************************************/
/*
* 把一個0-1串進行交換,計算最少交換次數
*/
#include<stdio.h>
#include<string.h>
const char arr[]="0001010101";
int main(void)
{
int len = strlen(arr);
int i,j;
int count = 0;
for(i=0,j=len-1;i<j;i++,j--)
{
for(;(i<j)&&(arr[i] == '0');i++)
for(;(i<j)&&(arr[i] == '1');j--);
if(i<j)
{
count++;
}
}
printf("%d\n",count);
return 0;
}
未完待續
反饋與建議
相關推薦
2016 C語言面試題——字串函式的實現
2016 C語言面試題——字串函式 前言:最近準備找工作了,所以需要做一些準備。先從基本的字串函式的實現開始。如果有發現什麼問題或有什麼疑惑,請及時評論。 strcat /************
C語言 不使用strcpy 函式實現字串複製功能
#include<stdio.h> void Copy_string(char* str1, char* str2); //函式宣告 int main() { char str1[20]; char str2[20]; puts("請輸入字串str1:");
C語言中返回字串函式的四種實現方法
其實就是要返回一個有效的指標,尾部變數退出後就無效了。 使用分配的記憶體,地址是有效 char *fun() { char* s = (char*)calloc(100, sizeof(char*) ); if (s)
C語言面試題:查詢字串中第一個不重複的字元
char findChar(char *s) { char *p,*q; p=q=s; while(*s != '\0') { while(*p++ != '\0')
C語言面試題分類->排序算法
OS sort 試題 時間復雜度 ups popup popu 使用 body 1.選擇排序。 每次將最小的數,與剩余數做比較。找到更小的,做交換。 時間復雜度:O(n2) 空間復雜度:O(1) 優缺點:耗時但內存空間使用小。 void selectSor
C語言面試題分類->回調
指向 name 傳輸 join 接口 但是 PE AS 一個數 本文主要講解如果實現回調,特別是在封裝接口的時候,回調顯得特別重要,我們首先假設有兩個程序員在寫代碼,A程序員寫底層驅動接口,B程序員寫上層應用程序,然而此時底層驅動接口A有一個數據d需要傳輸給B,此時有兩種方
智郵普創c語言面試題 ---- 字母概率
arr apple void != stdio.h app words 遊戲 包含 題目描述 小明最近對概率問題很感興趣。一天,小明和小紅一起玩一個概率遊戲,首先小明給出一個字母和一個單詞,然後由小紅計算這個字母在這個單詞中出現的概率。字母不區分大小寫。 例如,給定的字母是
C語言:如何用函式實現2-100以內素數的判別
C語言中如何用函式實現2-100以內素數的判別 #include<stdio.h> #include<math.h> int isPrime(int);//函式宣告 int main() { int i; for(i = 2; i <= 100;
C語言面試題---指標篇(三)
版本宣告:本文轉載於公眾號TeachPlus C語言面試題---指標篇(三) 了解了記憶體空間,接下來我們就一起看一下指標自身用法的一些題目,先來看這樣一道題目: 分析下面程式碼:` # include <stdio.h> # include
C語言面試題---指標篇(一)
版本宣告:本文轉載於公眾號TeachPlus 指標的使用,一直是c語言面試題中必考的部分, 因為指標本身使用的複雜性與普適性,所以考點非常多,而且也可以與其他知識相互結合, 因此我們將會使用五篇專題的篇幅來介紹指標。分析下面的程式,指出程式中的錯誤:
C語言面試題2
1 預處理 問題1:什麼是預編譯?何時需要預編譯? 答: 預編譯又稱預處理,是整個編譯過程最先做的工作,即程式執行前的一些預處理工作。主要處理#開頭的指令。如拷貝#include包含的檔案程式碼、替換#define定義的巨集、條件編譯#if等。. 何時需要預編譯: 1、總是使用不經常改動的
軟體素材---linux C語言:拼接字串函式 strcat的用例(與char陣列聯合使用挺好)
【標頭檔案】#include <string.h> 【原型】 1 char *strcat(char *dest, const char *src); 【引數】: dest 為目標字串指標,src 為源字串指標。
C語言面試題---指標篇(二)
# include <stdio.h># include <stdlib.h># include <string.h>void getMemory( char **p , int num){ *p = malloc(num);} int main() {
100道c語言面試題
題目來源: 1、中興、華為、慧通、英華達、微軟亞洲技術中心等中 外企業面試題目; 2、C 語言面試寶典(林銳《高質量程式設計第三版》)。 說明: 1、部分C 語言面試題中可能會參雜部分和C++ 相關的知 識,為了保持題目的靈活性故保留,但選題最終還是 會以C
C語言面試題大彙總 (影象處理方向)
1、區域性變數能否和全域性變數重名? 答:能,區域性會遮蔽全域性。要用全域性變數,需要使用"::" ;區域性變數可以與全域性變數同名,在函式內引用這個變數時,會用到同名的區域性變數,而不會用到全域性變數。對於有些編譯器而言,在同一個函式內可以定義多個同名的區域性變數,比如在兩個迴圈體內都定義一個同名的
C語言下使用iconv函式實現字元編碼轉換
1.iconv相關函式介紹 iconv命令是用來轉換檔案的編碼方式的(Convert encoding of given files from one encoding to another),比如它可以將UTF8編碼的轉換成GB18030的編碼,反過來也行。一般linux下包含iconv指令: 格式:ico
C語言面試題
關於“一年有多少秒”的巨集定義 網上關於這個問題的答案都是(365*24*60*60)UL,是錯誤的。 正解:數字和型別是一個整體,()是外人。 #include <stdio.h> #define SECONDS_PER_YEAR (3
9道常見C語言面試題
1、區域性變數能否和全域性變數重名? 答:能,區域性會遮蔽全域性。要用全域性變數,需要使用"::" ;區域性變數可以與全域性變數同名,在函式內引用這個變數時,會用到同名的區域性變數,而不會用到全域性變數。對於有些編譯器而言,在同一個函式內可以定義多個同
12個有趣的C語言面試題(中英文對照)
In this article, we will discuss some interesting problems on C language that can help students to brush up their C programming skills
C語言面試題 4 (查詢整數陣列中第二大的數)
題目:寫一個函式找出一個整數陣列中,第二大的數。【Mirosoft】 PS:1、” 66,66,66,66,66 ”,則沒有第二大數。 2、” 99,99,88,86,68,66 ”,則最大數是88。 下面我先給出查詢最大數字的程式: int GetFirstMaxNumbe