在字串中提取首個整數并區分正負
// 字串轉數值.cpp: 定義控制臺應用程式的入口點,
//
#include "stdafx.h"
#include"conio.h"
int convert(char* arr)
{
int i, j, k;
int m = 0;//用于記錄數字的真實位數
int n = 0;//用于記錄需要輸出的數字從字串的第幾位開始記錄位數
int F = 0;
int A, count = 0, B = 0;
while (arr[count] != '\0')//用于計算字串的位數
count++;
//printf("count is %d\n", count);
for (i = 0; i < count; i++)
{
if ((int)arr[i] == 45 && (int)arr[i + 1] > 47 && (int)arr[i + 1] < 58)//判斷這個數是否為負數并標記
{
n++;
F = 1;
continue;
}
if ((int)arr[i] < 48 || (int)arr[i]>57)//記錄需要輸出的數字從第幾位開始
{
n++;
continue;
}
if ((int)arr[i] > 47 && (int)arr[i] < 58 && (int)arr[i + 1] > 47 && (int)arr[i + 1] < 58)//記錄需要輸出的數字的位數
m++;
if ((int)arr[i] > 47 && (int)arr[i] < 58 && ((int)arr[i + 1] < 48 || (int)arr[i + 1]>57))//記錄需要輸出的數字的位數并標記需要輸出的數字是否即將結束
{
m++;
break;
}
}
//printf("%d\n", n);
//printf("%d\n", F);
//printf("%d\n", m);
k = m - 2;
for (i = n; i < n + m; i++)//利用n與n+m確定在陣列的哪里開始檢索需要輸出數字,在哪里結束,
{
A = 1;
if (i != n + m - 1)
{
for (j = k; j >= 0; j--)
A *= 10;
//printf("%d\n", A);
B += A * ((int)arr[i] - 48);
}
else
B += A * ((int)arr[i] - 48);
k--;
}
if (F == 1)
return -B;
return B;
}
int main()
{
char arr[] = "***-012-345";
printf("%d\n", convert(arr));
_getch();
return 0;
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/183375.html
標籤:其他
上一篇:2020年TI杯大學生電子設計大賽 無線運動傳感器節點 作品開源( PCB、設備/服務器工程、檔案、測驗視頻、設計報告)
