chinese直男口爆体育生外卖, 99久久er热在这里只有精品99, 又色又爽又黄18禁美女裸身无遮挡, gogogo高清免费观看日本电视,私密按摩师高清版在线,人妻视频毛茸茸,91论坛 兴趣闲谈,欧美 亚洲 精品 8区,国产精品久久久久精品免费

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

一些常見的C語言字符串操作

Q4MP_gh_c472c21 ? 來源:嵌入式ARM ? 作者:嵌入式Linux ? 2020-12-24 16:31 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

#字符串倒序輸出

實(shí)現(xiàn)邏輯,通過strlen獲取字符串長(zhǎng)度,然后通過 len/2 進(jìn)行交叉賦值,這里需要注意,不需要考慮len是奇數(shù)還是偶數(shù)的問題。

如果len是奇數(shù),最后一個(gè)字符就不需要倒序,如果是偶數(shù),最后兩個(gè)字符就倒序。

#include"stdio.h"

voidrechange_str(char*str)
{
inti,len;
chartmp;
if(NULL==str){
return;
}
len=strlen(str);
for(i=0;i"hello,world";
printf("%s
",str);
rechange_str(str);
printf("%s
",str);
return(0);
}

程序輸出

hello,world
dlrow,olleh

--------------------------------
Processexitedafter0.02841secondswithreturnvalue0
請(qǐng)按任意鍵繼續(xù)...

#整型轉(zhuǎn)字符串

實(shí)現(xiàn)邏輯,每個(gè)整數(shù)看其轉(zhuǎn)換進(jìn)制,從個(gè)位到十位百位都可以通過%操作加上/操作獲得,再用一個(gè)字符數(shù)組保存0-F。

用個(gè)位數(shù)對(duì)應(yīng)值轉(zhuǎn)為字符,注意轉(zhuǎn)換出的字符串是反向的,還要考慮傳入的若是負(fù)數(shù)如何處理,再用翻轉(zhuǎn)字符串完成最后整個(gè)操作

下面這段代碼需要好好研究一下,最好自己運(yùn)行試試。

#include"stdio.h"

char*sky_itoa(intvalue,char*str,unsignedintradix)
{
charlist[]="0123456789ABCDEF";
unsignedinttmp_value;
inti,j,k;
if(NULL==str){
returnNULL;
}
if(2!=radix&&8!=radix&&10!=radix&&16!=radix){
returnNULL;
}
i=0;
k=0;
if(radix==10&&value'-';
k=1;
}else{
tmp_value=(unsignedint)value;
}
do{
str[i++]=list[tmp_value%radix];
tmp_value/=radix;
}while(tmp_value);
str[i]='';
//翻轉(zhuǎn)
chartmp;
for(j=k;jreturnstr;
}

intmain(void)
{
inta=1254545;
charstr[100]={0};

printf("%s
",sky_itoa(a,str,2));
printf("%s
",sky_itoa(a,str,8));
printf("%s
",sky_itoa(a,str,10));
printf("%s
",sky_itoa(a,str,16));
return(0);
}

程序輸出

100110010010010010001
4622221
1254545
132491

--------------------------------
Processexitedafter0.02963secondswithreturnvalue0
請(qǐng)按任意鍵繼續(xù)...

#字符串復(fù)制

實(shí)現(xiàn)邏輯,逐個(gè)賦值直到遇到''停止即可

#include"stdio.h"

char*sky_strcpy(char*dst,constchar*str)
{
if(NULL==dst||NULL==str){
returnNULL;
}
char*ret=dst;
while(*str!=''){
*dst++=*str++;
}
returnret;
}

intmain(void)
{
charstr_1[100]="hello,world";
charstr[100]={0};

sky_strcpy(str,str_1);
printf("str_1:%s
",str_1);
printf("str:%s
",str);
return(0);
}

程序輸出

str_1:hello,world
str:hello,world

--------------------------------
Processexitedafter0.03334secondswithreturnvalue0
請(qǐng)按任意鍵繼續(xù)...

#字符串比較

1、正常比較是否相同 實(shí)現(xiàn)邏輯,判斷字符串長(zhǎng)度是否相同,若相同逐個(gè)比較字符是否相同

#include"stdio.h"

intsky_strcmp(char*dst,char*str)
{
inti,len;
if(NULL==dst||NULL==str){
return0;
}
if(strlen(dst)!=strlen(str)){
return0;
}
len=strlen(dst);
for(i=0;iif(*dst++!=*str++){
return0;
}
}
return1;
}

intmain(void)
{
charstr_1[100]="hello,world";
charstr_2[100]="hello,world";
charstr[100]="adfs";

printf("%d
",sky_strcmp(str_1,str));
printf("%d
",sky_strcmp(str_1,str_2));
return(0);
}

程序輸出

0
1

--------------------------------
Processexitedafter0.02802secondswithreturnvalue0
請(qǐng)按任意鍵繼續(xù)...

2、忽略大小寫字符串比較

實(shí)現(xiàn)邏輯,在比較字符時(shí)可以將其統(tǒng)一轉(zhuǎn)換為大寫或小寫,然后再進(jìn)行比對(duì)即可,和正常對(duì)比無其他不同

#include"stdio.h"

#defineCONVERT(c)(((c)>='A'&&(c)<=?'Z')???((c)?-?'A'?+?'a')?:?(c))
intsky_strcmp(char*dst,char*str)
{
inti,len;
if(NULL==dst||NULL==str){
return0;
}
if(strlen(dst)!=strlen(str)){
return0;
}
len=strlen(dst);
for(i=0;iif(CONVERT(*dst)!=CONVERT(*str)){
return0;
}
dst++;
str++;
}
return1;
}

intmain(void)
{
charstr_1[100]="heLlo,world";
charstr_2[100]="hello,world";
charstr[100]="adfs";

printf("%d
",sky_strcmp(str_1,str));
printf("%d
",sky_strcmp(str_1,str_2));
return(0);
}

程序輸出

0
1

--------------------------------
Processexitedafter0.04624secondswithreturnvalue0
請(qǐng)按任意鍵繼續(xù)...

#memcpy函數(shù)實(shí)現(xiàn)

實(shí)現(xiàn)邏輯,主要就是逐個(gè)賦值即可完成

1、不考慮拷貝覆蓋問題

#include"stdio.h"
#include"string.h"

void*sky_memecpy(void*dst,constvoid*str,intn)
{
if(NULL==dst||NULL==str||n<=?0)?{
??returnNULL;
}
char*pdst=(char*)dst;
char*pstr=(char*)str;
while(n--){
*pdst++=*pstr++;
}
returndst;
}

intmain(void)
{
charstr_1[100]="heLlo,world";
charstr_2[100]="sdfsdfs";
sky_memecpy(str_2,str_1,strlen(str_1));
printf("%s
",str_2);
return(0);
}

程序輸出

heLlo,world

--------------------------------
Processexitedafter0.02516secondswithreturnvalue0
請(qǐng)按任意鍵繼續(xù)...

2、考慮拷貝覆蓋問題

拷貝覆蓋是我們?cè)诳截愖址臅r(shí)候需要注意的一個(gè)問題,我下面的示例程序,使用第一個(gè)函數(shù)的時(shí)候,就出現(xiàn)了問題,使用第二個(gè)函數(shù)就沒有出現(xiàn)問題。

原因是,我們?cè)醋址湍康淖址牡刂范际且粯拥模覀兿M炎址笠苿?dòng)一個(gè)位置,但是實(shí)際上出現(xiàn)了問題。

#include"stdio.h"
#include"string.h"

void*sky_memecpy_1(void*dst,constvoid*str,intn)
{
if(NULL==dst||NULL==str||n<=?0)?{
???returnNULL;
}
char*pdst=(char*)dst;
char*pstr=(char*)str;
while(n--){
*pdst++=*pstr++;
}
returndst;
}

void*sky_memecpy(void*dst,constvoid*str,intn)
{
if(NULL==dst||NULL==str||n<=?0)?{
???returnNULL;
}
char*pdst=(char*)dst;
char*pstr=(char*)str;

if(pdst>pstr&&pdstwhile(n--){
*pdst--=*pstr--;
}
}else{
while(n--){
*pdst++=*pstr++;
}
}
returndst;
}

intmain(void)
{
charstr_1[100]="heLlo,world";
charstr_2[100]="heLlo,world";
sky_memecpy_1(str_1+1,str_1,strlen(str_1));
printf("%s
",str_1);

sky_memecpy(str_2+1,str_2,strlen(str_2));
printf("%s
",str_2);
return(0);
}

程序輸出

hhhhhhhhhhhh
hheLlo,world

--------------------------------
Processexitedafter0.02773secondswithreturnvalue0
請(qǐng)按任意鍵繼續(xù)...

針對(duì)上面的拷貝覆蓋問題,單獨(dú)寫了一個(gè)測(cè)試程序

#include"stdio.h"
#include"string.h"

void*sky_memecpy(void*dst,constvoid*str,intn)
{
if(NULL==dst||NULL==str||n<=?0)?{
??returnNULL;
}
char*pdst=(char*)dst;
char*pstr=(char*)str;
while(n--){
printf("dst:%c--->str:%c
",*pdst,*pstr);
*pdst++=*pstr++;
}
returndst;
}

intmain(void)
{
charstr_1[100]="heLlo,world";
sky_memecpy(str_1+1,str_1,strlen(str_1));
printf("%s
",str_1);
return(0);
}

程序輸出

dst:e--->str:h
dst:L--->str:h
dst:l--->str:h
dst:o--->str:h
dst:,--->str:h
dst:w--->str:h
dst:o--->str:h
dst:r--->str:h
dst:l--->str:h
dst:d--->str:h
dst:--->str:h
hhhhhhhhhhhh

--------------------------------
Processexitedafter0.02575secondswithreturnvalue0
請(qǐng)按任意鍵繼續(xù)...

初始的時(shí)候,dst指向 e 字符,str 指向h 字符,然后每次都是dst先移動(dòng),str再移動(dòng),就出現(xiàn)了dst被h字符所覆蓋。好了,就這些內(nèi)容,希望大家好好消化,這些代碼對(duì)面試很有幫助。

責(zé)任編輯:xj
原文標(biāo)題:面試必備!常見的C語言字符串操作
文章出處:【微信公眾號(hào):嵌入式ARM】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 嵌入式
    +關(guān)注

    關(guān)注

    5193

    文章

    20276

    瀏覽量

    331729
  • C語言
    +關(guān)注

    關(guān)注

    183

    文章

    7642

    瀏覽量

    145125
  • 字符串
    +關(guān)注

    關(guān)注

    1

    文章

    595

    瀏覽量

    23109

原文標(biāo)題:面試必備!常見的C語言字符串操作

文章出處:【微信號(hào):gh_c472c2199c88,微信公眾號(hào):嵌入式微處理器】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評(píng)論

    相關(guān)推薦
    熱點(diǎn)推薦

    字符串控件與靜態(tài)字符串控件中預(yù)覽字符顯示亂碼,如何修改顯示正常?

    字符串控件與靜態(tài)字符串控件中預(yù)覽字符顯示亂碼,如何修改顯示正常?
    發(fā)表于 01-20 17:17

    字符串,數(shù)字控件如何控制背景顏色和前景字體顏色?

    字符串,數(shù)字控件如何控制背景顏色和前景字體顏色?
    發(fā)表于 01-20 15:12

    Linux下怎么讓中文字符串按照拼音排序?

    求教 Linux 下怎么讓中文字符串按照拼音排序?
    發(fā)表于 01-06 07:40

    字符串關(guān)聯(lián)數(shù)字變量如何使用?我們的地址都是16位數(shù)據(jù),可以使用16位數(shù)字變量顯示字符串嗎?

    字符串關(guān)聯(lián)數(shù)字變量如何使用?我們的地址都是16位數(shù)據(jù),可以使用16位數(shù)字變量顯示字符串嗎?
    發(fā)表于 12-15 08:24

    C語言常見算法

    ### 字符串反轉(zhuǎn) ```c void reverseString(char* str) { int n = strlen(str); for (int i = 0; i < n / 2
    發(fā)表于 11-24 08:29

    C語言的常量介紹

    、-13; 實(shí)型常量:13.33、-24.4; 字符常量:‘a(chǎn)’、‘M’ 字符串常量:”I love china!” 在C語言中,可以用個(gè)
    發(fā)表于 11-24 07:12

    C語言和單片機(jī)C語言有什么差異

    語言的功能特性外,它可以很好的操作底層的硬件接口。在C語言的基礎(chǔ)上,如果你把一些單片機(jī)的端口或特殊功能寄存器加于定義,使用的時(shí)候會(huì)更加方便,
    發(fā)表于 11-14 07:55

    C語言的printf基本用法介紹

    十進(jìn)制形式輸出個(gè)整數(shù)。除了 %d,printf 支持更多的格式控制,例如: %c:輸出一個(gè)字符。c 是 character 的簡(jiǎn)寫。 %s:輸出
    發(fā)表于 11-12 07:04

    labview如何生成個(gè)帶字符串返回的dll

    labview如何生成個(gè)dll,如下圖,要求個(gè)輸入,類型是字符串,返回類型也是字符串
    發(fā)表于 08-28 23:20

    在Python中字符串逆序有幾種方式,代碼是什么

    對(duì)于個(gè)給定的字符串,逆序輸出,這個(gè)任務(wù)對(duì)于python來說是種很簡(jiǎn)單的操作,畢竟強(qiáng)大的列表和字符串處理的
    的頭像 發(fā)表于 08-28 14:44 ?871次閱讀

    harmony-utils之StrUtil,字符串工具類

    harmony-utils之StrUtil,字符串工具類 harmony-utils 簡(jiǎn)介與說明 [harmony-utils] 款功能豐富且極易上手的HarmonyOS工具庫,借助眾多實(shí)用工具類
    的頭像 發(fā)表于 07-03 11:32 ?473次閱讀

    對(duì)CY7C65211有一些疑問求解答

    我對(duì) CY7C65211 有一些疑問。 (1)關(guān)于制造商字符串,評(píng)估套件(CYUSB234)顯示“ CYPRESS? Semiconductor”,但我認(rèn)為從現(xiàn)在開始發(fā)貨的設(shè)備的默認(rèn)值將更改
    發(fā)表于 05-06 09:28

    STM32C031C6使用的是UART2通訊,通過printf()函數(shù)發(fā)送字符串時(shí),漢字錯(cuò)碼怎么解決?

    使用的是UART2通訊,通過printf()函數(shù)發(fā)送字符串時(shí),漢字錯(cuò)碼(見下圖),應(yīng)該是KEIL哪里沒有設(shè)置好的問題。 啟用了UART2的中斷接收,可以接收到串口調(diào)試助手的數(shù)據(jù),但是緩存區(qū)的指針沒有歸零,下次接收時(shí)緩存區(qū)中的內(nèi)容接續(xù)(如下圖所示),不知道用什么命令來清除緩存區(qū)(即讓指針歸零)。
    發(fā)表于 03-07 12:30

    基于OpenHarmony標(biāo)準(zhǔn)系統(tǒng)的C++公共基礎(chǔ)類庫案例:ThreadPoll

    。每個(gè)線程每秒打印1段字符串,10秒后停止。2、基礎(chǔ)知識(shí)C++公共基礎(chǔ)類庫為標(biāo)準(zhǔn)系統(tǒng)提供了一些常用的C++開發(fā)工具類,包括:文件、路徑、字符串
    的頭像 發(fā)表于 02-10 18:09 ?757次閱讀
    基于OpenHarmony標(biāo)準(zhǔn)系統(tǒng)的<b class='flag-5'>C</b>++公共基礎(chǔ)類庫案例:ThreadPoll

    請(qǐng)問如何用Verilog實(shí)現(xiàn)將ascaii碼數(shù)值字符串轉(zhuǎn)換成定點(diǎn)數(shù)?

    我需要接收個(gè)ascaii碼字符串,內(nèi)容是12位有效數(shù)字的數(shù)值,帶小數(shù)。我不知道怎么把小數(shù)部分轉(zhuǎn)換成定點(diǎn)數(shù)。
    發(fā)表于 01-23 21:57