C語言字符串全方位練習,涉及知識點:字符串解析、大小寫判斷、字符串插入、字符串刪除、字符串排序、字符串轉整數、字符串轉浮點數、時間轉換、GPS數據解析等等。
1. 計算空格、大小寫字母
從鍵盤上輸入一個字符串, 計算字符串里有多少個空格、小寫字母、大寫字母、數字。
#include //標準輸入輸出
#include //字符串處理頭文件
int main(int argc,char **argv)
{
int len=0;
int i;
char str[100];
int cnt[5]={0}; //初始化賦值
//scanf("%s",str); //從鍵盤上錄入字符串,字符串結尾: '\0'
//gets(str); //從鍵盤上錄入字符串
fgets(str,100,stdin); //從鍵盤上錄入字符串 (標準輸入)
//空格、小寫字母、大寫字母、數字 其他數據
/*1. 計算字符串的長度*/
while(str[len]!='\0')len++;
printf("len1=%d\n",len);
printf("len2=%d\n",strlen(str)); //計算字符串長度
/*2. 處理字符串*/
for(i=0;i='a'&&str[i]<='z')cnt[1]++;
else if(str[i]>='A'&&str[i]<='Z')cnt[2]++;
else if(str[i]>='0'&&str[i]<='9')cnt[3]++;
else cnt[4]++;
}
/*3. 打印結果*/
printf("空格:%d\n",cnt[0]);
printf("小寫:%d\n",cnt[1]);
printf("大寫:%d\n",cnt[2]);
printf("數字:%d\n",cnt[3]);
printf("其他:%d\n",cnt[4]);
return 0;
}
2. 字符串排序
示例:
#include //標準輸入輸出
#include //字符串處理頭文件
int main(int argc,char **argv)
{
int len=0;
int i,j;
char tmp;
char str[100];
fgets(str,100,stdin); //從鍵盤上錄入字符串 (標準輸入)
/*1. 計算字符串的長度*/
len=strlen(str); //計算字符串長度
/*2. 字符串排序*/
for(i=0;i;i++)>
3. 字符串插入
字符串插入: “1234567890”
在第2個位置后面插入”ABC”
最終結果: “12ABC34567890”
#include //標準輸入輸出
#include //字符串處理頭文件
int main(int argc,char **argv)
{
int i,j;
int src_len;
int new_len;
/*
123456789
12 3456789
*/
char src_str[100]="123456789";
char new_str[]="abcd";
int addr=2; //插入的位置
/*1. 計算字符串的長度*/
src_len=strlen(src_str); //"123"
new_len=strlen(new_str);
/*2. 字符串移動*/
for(i=src_len-1;i>addr-1;i--)
{
src_str[i+new_len]=src_str[i]; //向后移動 new_len
}
/*3. 插入新的數據*/
for(i=0;i;i++)src_str[addr+i]=new_str[i];>
5. 字符串刪除
5. 字符串刪除
字符串刪除: “1234567890”
刪除”456” 最終結果: “1237890”
示例:
#include //標準輸入輸出
#include //字符串處理頭文件
int main(int argc,char **argv)
{
char src_str[100];
char del_str[10];
int src_len=0,del_len=0;
int i,j;
int cnt=0;
/*1. 錄入字符串*/
printf("輸入源字符串:"); //123dufvdfv123dfljvb
fgets(src_str,100,stdin); //從鍵盤上錄入源字符串
printf("輸入查找的字符串:"); //123
fgets(del_str,10,stdin); //從鍵盤上錄入源字符串
/*2. 計算長度*/
src_len=strlen(src_str);
src_str[src_len-1]='\0';
src_len-=1; //src_len=src_len-1;
del_len=strlen(del_str); //"123\n" =4
del_str[del_len-1]='\0';
del_len-=1;
printf("源字符串:%s,%d\n",src_str,src_len);
printf("刪除字符串:%s,%d\n",del_str,del_len);
/*3. 查找*/
for(i=0;i+1;i++)>
6. 字符串替換
6. 字符串替換
字符串”1234567890”
將456替換為”888”
最終: “1238887890”
需要考慮3種情況
7. 字符串轉整數。
7. 字符串轉整數。
從鍵盤上輸入一個字符串”12345”, 得到整數: 12345;
#include //標準輸入輸出
#include //字符串處理頭文件
int string_to_int(char str[]);
int main(int argc,char **argv)
{
int data;
char str[]="125abcd";
data=string_to_int(str);
printf("data=%d\n",data);
return 0;
}
/*
函數功能: 字符串轉為整數
字符轉為整數: -48 或者 -'0'
1234
*/
int string_to_int(char str[])
{
int value=0; //存放轉換之后的結果
int i=0;
while((str[i]!='\0')&&(str[i]>='0'&&str[i]<='9'))
{
value*=10;
value+=str[i]-'0';
i++;
}
return value;
}
8. 整數轉字符串
8. 整數轉字符串
整數轉字符串。輸入一個整數1234,得到字符串: “1234”
1234%10=4 1234/10=123 123%10=3 123/10=12
示例:
#include //標準輸入輸出
#include //字符串處理頭文件
void int_to_string(char str[],int data);
int main(int argc,char **argv)
{
char str[100];
int_to_string(str,12345);
printf("str=%s\n",str);
return 0;
}
/*
函數功能: 整數轉為字符串
函數參數:
char str[] //存放轉換之后的整數(字符串)
int data //待轉換的整數
*/
void int_to_string(char str[],int data)
{
int i=0,j;
char tmp;
/*1. 將整數轉為字符串*/
while(data)
{
str[i]=data%10+'0';
data/=10;
i++;
}
str[i]='\0';
/*2. 交換順序*/
for(j=0;j
9. 浮點數轉字符串
9. 浮點數轉字符串
浮點數轉字符串。輸入一個浮點數123.456 得到字符串"123.456"
示例:
#include //標準輸入輸出
#include //字符串處理頭文件
void float_to_string(char str[],float data);
int main(int argc,char **argv)
{
char str[100];
float_to_string(str,12345.123);
printf("str=%s\n",str);
return 0;
}
/*
函數功能: 浮點數轉為字符串
函數參數:
char str[] //存放轉換之后的 浮點數(字符串)
int data //待轉換的 浮點數
*/
void float_to_string(char str[],float data)
{
int i=0,j;
char tmp;
int addr;
int int_data=data; //得到整數 12345
int float_data=(data-int_data)*1000000;// 0.123456 *1000000 =123456
/*1. 將整數部分轉為字符串*/
while(int_data)
{
str[i]=int_data%10+'0';
int_data/=10;
i++;
}
str[i]='.'; //添加小數點
/*2. 交換順序: 整數*/
for(j=0;j
10.字符串轉浮點數
10.字符串轉浮點數
字符串轉浮點數。輸入一個字符串: “123.456” 得到浮點數類型: 123.456
#include //標準輸入輸出
#include //字符串處理頭文件
float string_to_float(char str[]);
int main(int argc,char **argv)
{
float data;
char str[]="123.456";
data=string_to_float(str);
printf("data=%f\n",data);
return 0;
}
/*
函數功能: 字符串轉為浮點數
字符轉為整數: -48 或者 -'0'
*/
float string_to_float(char str[])
{
int int_value=0; //存放轉換之后的結果
int float_value=0;
int i=0;
float data;
int cnt=0; //記錄小數部分的數量
int tmp=1;
/*1. 整數部分*/
while((str[i]!='\0')&&(str[i]>='0'&&str[i]<='9'))
{
int_value*=10;
int_value+=str[i]-'0';
i++;
}
/*2. 浮點數部分*/
i++; //跨過小數點
while((str[i]!='\0')&&(str[i]>='0'&&str[i]<='9'))
{
float_value*=10;
float_value+=str[i]-'0';
i++;
cnt++;
}
for(i=0;i;i++)tmp*=10;>
11. 時間轉換
11. 時間轉換
時間轉換(秒與標準時間的轉換)。
在代碼里加入: #include 頭文件。‘
調用time_t time(time_t *t);函數獲取本地時間。
示例: unsigned int sec=time(NULL); //sec是獲取到的秒單位時間
該時間是從1970年開始計算的。
什么是標準時間? 得到年-月-日 時:分:秒
本身: 數字電子鐘。
RTC: 實時時鐘。
#include
time_t time(time_t *t);
Linux下日期修改:
[root@wbyq code]# date -s "2018-12-24 21:09:20"
示例:
#include //標準輸入輸出
#include //字符串處理頭文件
#include
int get_year(int year);
void sec_to_time(int sec);
void Get_Week(int sec);
//定義時間結構
int tm_sec; /* seconds */
int tm_min; /* minutes */
int tm_hour; /* hours */
int tm_mday; /* day of the month */
int tm_mon; /* month */
int tm_year; /* year */
int tm_wday; /* day of the week */
int tm_yday; /* day in the year */
int mon_p[12]={31,28,31,30,31,30,31,31,30,31,30,31};
int mon_r[12]={31,29,31,30,31,30,31,31,30,31,30,31};
int main(int argc,char **argv)
{
int sec1;
int sec2;
while(1)
{
sec1=time(NULL);//獲取當前計算機系統的秒單位時間
if(sec1!=sec2)
{
sec2=sec1;
sec_to_time(sec2+8*60*60);
printf("%d-%d-%d %d:%d:%d\n",
tm_year,
tm_mon,
tm_mday,
tm_hour,
tm_min,
tm_sec
);
printf("當前時間是當前年的第%d天\n",tm_yday);
}
}
return 0;
}
/*
函數功能: 秒轉標準時間
*/
void sec_to_time(int sec)
{
int i;
Get_Week(sec);
/*1. 得到年份*/
tm_year=1970;//基礎年份
while(sec>=365*24*60*60)
{
if(get_year(tm_year)) //閏年
{
if(sec>=366*24*60*60)
{
sec-=366*24*60*60; //減去一年
tm_year++; //增加一年
}
else break;
}
else //平年
{
sec-=365*24*60*60; //減去一年
tm_year++; //增加一年
}
}
/*計算當前時間是一年中的第幾天*/
tm_yday=sec/(24*60*60);
/*2. 得到月份*/
tm_mon=1;
for(i=0;i<12;i++)
{
if(get_year(tm_year)) //閏年
{
if(sec>=mon_r[i]*24*60*60)
{
sec-=mon_r[i]*24*60*60;
tm_mon++;
}
else break;
}
else //平年
{
if(sec>=mon_p[i]*24*60*60)
{
sec-=mon_p[i]*24*60*60;
tm_mon++;
}
else break;
}
}
/*3. 天數*/
tm_mday=1;
while(sec>=24*60*60)
{
tm_mday++;
sec-=24*60*60;
}
/*4. 小時*/
tm_hour=0;
while(sec>=60*60)
{
tm_hour++;
sec-=60*60;
}
/*5. 分鐘*/
tm_min=0;
while(sec>=60)
{
tm_min++;
sec-=60;
}
/*6. 秒*/
tm_sec=sec;
}
/*
函數功能: 獲取年份狀態: 平年和閏年
函數參數: year填年份
返回值: 0表示平年 1表示閏年
*/
int get_year(int year)
{
if((year%400==0)||(year%4==0&&year%100!=0))
{
return 1;
}
return 0;
}
/*
函數功能: 獲取星期
*/
void Get_Week(int sec)
{
int day=sec/(24*60*60);
switch(day%7)
{
case 0:
printf("星期4\n");
break;
case 1:
printf("星期5\n");
break;
case 2:
printf("星期6\n");
break;
case 3:
printf("星期日\n");
break;
case 4:
printf("星期1\n");
break;
case 5:
printf("星期2\n");
break;
case 6:
printf("星期3\n");
break;
}
}
12. GPS數據解析
12. GPS數據解析
提取最基本的數據:
(1) UTC時間
(2) 海拔高度
(3) 經緯度
//GPS返回的數據格式如下
char gps_data[]=
{
"$GNGGA,114955.000,2842.4158,N,11549.5439,E,1,05,3.8,54.8,M,0.0,M,,*4F \
$GNGLL,2842.4158,N,11549.5439,E,114955.000,A,A*4D \
$GPGSA,A,3,10,31,18,,,,,,,,,,5.7,3.8,4.2*37 \
$BDGSA,A,3,07,10,,,,,,,,,,,5.7,3.8,4.2*2A \
$GPGSV,3,1,10,10,49,184,42,12,16,039,,14,54,341,,18,22,165,23*7B \
$GPGSV,3,2,10,22,11,318,,25,51,055,,26,24,205,,29,13,110,*7C \
$GPGSV,3,3,10,31,50,287,36,32,66,018,*7F \
$BDGSV,1,1,04,03,,,07,05,,,29,07,79,246,33,10,52,232,19*62 \
$GNRMC,114955.000,A,2842.4158,N,11549.5439,E,0.00,44.25,061117,,,A*4D \
$GNVTG,44.25,T,,M,0.00,N,0.00,K,A*14 \
$GNZDA,114955.000,06,11,2017,00,00*47 \
$GPTXT,01,01,01,ANTENNA OK*35"
};
;i++)src_str[addr+i]=new_str[i];> -
C語言
+關注
關注
180文章
7604瀏覽量
136813 -
字符串
+關注
關注
1文章
579瀏覽量
20515
發布評論請先 登錄
相關推薦
評論