澳門建設(shè)銀行官方網(wǎng)站湖南優(yōu)化推廣
前言:
1.CSDN由于我的排版不怎么好看,我的有道云筆記比較美觀,請(qǐng)移步有道云筆記
2.修煉必備
????????1)入門必備:VS2019社區(qū)版,下載地址:Visual Studio 較舊的下載 - 2019、2017、2015 和以前的版本 (microsoft.com)
????????2)趁手武器:印象筆記/有道云筆記
????????3)修煉秘籍:牛客網(wǎng) - 找工作神器|筆試題庫|面試經(jīng)驗(yàn)|實(shí)習(xí)招聘內(nèi)推,求職就業(yè)一站解決_??途W(wǎng) (nowcoder.com)
????????4)雷劫必備:leetcode?力扣(LeetCode)官網(wǎng) - 全球極客摯愛的技術(shù)成長平臺(tái)?
????????注:遇到瓶頸怎么辦?百度百科_全球領(lǐng)先的中文百科全書 (baidu.com)
字符串的求解
1.問題描述
給定一個(gè)字符串(長度在0-1000),求出該字符串的長度,注:輸入字符串的各字符之間不存在空格
2. 代碼解釋
? ? ? ? 法一:使用庫函數(shù)strlen()求解【需包含頭文件string.h】
注:strlen()函數(shù)是用于求字符串長度的,是得到'\0'字符之前的所有字符數(shù)
#include <stdio.h>
#include <string.h>int main()
{char str[1000] = "";while(scanf("%s", str)!=EOF)printf("%d\n", strlen(str));return 0;
}
EOF是一個(gè)宏,它本質(zhì)是-1,當(dāng)scanf()函數(shù)返回EOF的時(shí)候,就說明scanf()沒有任何輸入。
EOF的宏定義如下:
????????#define EOF -1
????????法二: 計(jì)數(shù)器?
思路分析:使用一個(gè)計(jì)數(shù)器變量計(jì)算字符串'\0'之前的字符總數(shù)
#include <stdio.h>
#include <assert.h>int getCharTotal(const char* str)
{assert(str);//判斷空指針int count = 0;//統(tǒng)計(jì)'\0'之前的字符數(shù)while (*str != '\0'){count++;//計(jì)數(shù)str++;//指向下一個(gè)字符}return count;
}int main()
{char str[100] = "";while (scanf("%s", str) != EOF){int total = getCharTotal(str);printf("%d\n", total);}return 0;
}
????????法三:指針-指針
思路分析:引入一個(gè)字符指針,讓該字符指針指向字符串的首地址,使該指針遍歷到'\0'的地址后,讓指針指向的地址減去字符串起始地址,即得到'\0'之前的字符總數(shù)
#include <stdio.h>
#include <assert.h>int getCharTotal(const char* str)
{assert(str);//判斷空指針const char* cur = str;//遍歷指針//使遍歷指針遍歷到'\0'的位置while (*cur != '\0'){cur++;}//指針-指針得到的是字符個(gè)數(shù)return cur - str;
}int main()
{char str[100] = "";while (scanf("%s", str) != EOF){int total = getCharTotal(str);printf("%d\n", total);}return 0;
}
? ? ? ? ?法四:遞歸
思路分析:字符沒有遇到'\0'的時(shí)候進(jìn)行遞歸,進(jìn)行遞歸的時(shí)候,需要得到當(dāng)前字符指向它的下一個(gè)字符的地址,且字符串長度+1,遇到'\0'之后,返回字符串的長度
#include <stdio.h>
#include <assert.h>int getCharTotal(const char* str)
{assert(str);//判斷空指針if (*str == '\0')return 0;return 1 + getCharTotal(str + 1);
}int main()
{char str[100] = "";while (scanf("%s", str) != EOF){int total = getCharTotal(str);printf("%d\n", total);}return 0;
}