atoi
公式文書(ポータル)を見てみましょう
インターフェース
int atoi (const char * str);
文字列を整数に変換する
- その内容を整数として解釈するC文字列strを解析します
。整数は、int型の値として返されます。 - この関数は
、最初の非空白文字が
見つかるまで、最初に必要な数の空白文字(isspaceの場合と同様)を破棄します。次に、この文字から始めて、オプションの最初の
プラス記号またはマイナス記号の後にできるだけ多くの10進数を取り、
それらを数値として解釈します。 - 文字列には
、整数を形成する文字の後に追加の文字を含めることができます。これらの文字は無視され、
この関数の動作には影響しません。 - str内の非空白文字の最初のシーケンスが
有効な整数でない場合、または
strが空であるか空白文字のみが含まれているためにそのようなシーケンスが存在しない場合、変換
は実行されず、ゼロが返されます。
パラメーター
- 整数の表現で始まるC文字列。
戻り値
- 成功すると、関数は変換された
整数をint値として返します。 - 変換された値が
intで表現可能な値の範囲外になると、未定義の動作が発生します。
これが可能である場合、より堅牢なクロスプラットフォームの代替手段については、strtolを参照してください。
拷問と言えば、コード検証を使用して検証します
int main() {
//模拟实现atoi
char str[] = "-22675";
int ans = atoi(str);
printf("%d\n",ans);
system("pause");
return 0;
}
演算結果:-22675
int main() {
//模拟实现atoi
char str[] = " -22675";// 添加空格
int ans = atoi(str);
printf("%d\n",ans);
system("pause");
return 0;
}
演算結果:-22675
int main() {
//模拟实现atoi
char str[] = " +22675";
int ans = atoi(str);
printf("%d\n",ans);
system("pause");
return 0;
}
実行結果:22675
int main() {
//模拟实现atoi
char str[] = " ww +22675";
int ans = atoi(str);
printf("%d\n",ans);
system("pause");
return 0;
}
演算結果:0
int main() {
//模拟实现atoi
char str[] = " +22675wer";
int ans = atoi(str);
printf("%d\n",ans);
system("pause");
return 0;
}
実行結果:22675
たくさんの拷問を試みた後、誰もが彼の機能を発見したはずです。自分でatoiを実現
C言語の実装
#include<stdio.h>
#include<stdlib.h>
#include<math.h>
#include<assert.h>
#include<windows.h>
int my_atoi(const char * str) {
assert(str);
int j = 0;
while (str[j] != '\0') {
// 将字符串前边的空格跳过
while (str[j] != '\0' && str[j] == ' ') {
j++;
}
//如果出现+ - 或者数字就结束循环,否则返回0
if (str[j]!='+' && str[j] != '-' && (str[j]<'0' ||str[j]>'9')) {
return 0;
}
break;
}
// 程序走到这里说明开头是+123 或者-123类似开头
int ans = 0;
int tmp = 1;
// 对 + - 处理一下,利用tmp标记+ -
if (str[j] == '+') {
j++;
}
if (str[j] == '-') {
tmp = -1;
j++;
}
int count = 0;
// 处理数字
while (str[j] != '\0'&& str[j] >='0' &&str[j]<='9') {
//printf("%d", pow(10, count));
ans += pow(10,count)*(str[j] - '0');
count++;
j++;
}
int num = 0;
// 反转一下
while (ans) {
num += pow(10, --count)*(ans % 10);
ans = ans / 10;
}
return num*tmp;
}
int main() {
//模拟实现atoi
char str[] = " +22675wer";
int ans = my_atoi(str);
printf("%d\n",ans);
system("pause");
return 0;
}