No.1
- 回答日時:
No.3
- 回答日時:
#include <string.h>
#include <stdlib.h>
#include <errno.h>
#include <limits.h>
int string_to_integer(const char *s)
{
if (s == NULL || s[0] == '\0') abort();
if (s[strspn(s, "0123456789")] != '\0') abort();
errno = 0;
long result = strtol(s, NULL, 10);
if (errno != 0 || result < INT_MIN || INT_MAX < result) abort();
return (int)result;
}
仕様が不明な部分は勝手に解釈しました。
この回答への補足
ちょっとこれは理解不能ですね。。w
まだ多様なことは習ってませんし<stdio.h>と基礎的な学習量のみでコーディングできる範囲なんだと思います。
回答ありがとうございます!
No.6ベストアンサー
- 回答日時:
#2 補足
>他の文字で構成された文字列の場合は終了させたいです。
他の文字が「現れた時点」で関数を終了、としてみました。
ソースの例では、「小数点」で処理を終了し、それまでの数を戻り値としています。
#3 補足
>基礎的な学習量のみでコーディングできる範囲なんだと思います。
・ for 文のインクリメントで次の文字を処理
・「ポインタ」のインクリメントで次の文字を処理(未習?)
2つ作ってみました。
#4 補足
>変換の仕方が考え付かない感じですね。。
876 = 8 * 100 + 7 * 10 + 6 としたいところですが、いつ「他の文字」が現れるか不明ですので、まだ数字が続く、と判った時点で * 10 (◆)しています。
まず、0 + 8
次が、7 と判明した時点で、8 * 10。そして 80 + 7
次に、6 と判明した時点で、87 * 10。そして 870 + 6
次に、「他の文字」なので、それまでの数 876 で終了。
http://e-words.jp/p/r-ascii.html
#include <stdio.h>
int toPlusIntegerP( char *cStr )
{
int iRet = 0, iChk;
while( *cStr ){
iChk = *cStr++ - '0'; // 文字から数値へ
if( iChk < 0 ) return( iRet );
if( iChk > 9 ) return( iRet );
iRet *= 10; // 桁上げ ◆
iRet += iChk;
}
return( iRet );
}
int toPlusIntegerF( char cStr[] )
{
int iRet = 0, i, i1;
for( i = 0; ( cStr[ i ] >= '0' ) && ( cStr[ i ] <= '9' ); i++ ){
i1 = cStr[ i ] - '0'; // 文字から数値へ
iRet *= 10; // 桁上げ ◆
iRet += i1;
}
return( iRet );
}
int main( void )
{
char cStr[ 8 ] = "876.543";
printf( "%d\n", toPlusIntegerP( cStr ) );
printf( "%d\n", toPlusIntegerF( cStr ) );
return( 0 );
}
注:インデントに全角空白を用いています。コピペ後、タブに一括変換して下さい。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- JavaScript カラーミーショップのsectionループ内で、[引数][戻り値]ありの関数的な処理を行いたいです。 1 2022/05/07 19:39
- C言語・C++・C# 至急教えてください! プログラミングの問題です! お願いします! 出力2と全く同じ出力をするように、 2 2022/06/22 23:10
- Ruby プログラミング 3 2023/06/09 14:30
- HTML・CSS HTMLの・要素・属性・属性値 はプログラム言語の「変数」みたいに変更できますか? 5 2022/10/04 05:27
- C言語・C++・C# 至急教えてください。プログラミングの問題です。 malloc関数を使ってください!お願いします! 最 1 2022/07/21 09:28
- C言語・C++・C# 至急お願いします。プログラミングの問題です。 最初に正の整数nの入力を受け付け、次に分数の分子と分母 3 2022/07/19 17:09
- C言語・C++・C# c言語 int temp = 0; if(isdigit(arr[i])){ temp=arr[i] 2 2022/03/27 01:44
- C言語・C++・C# 至急教えてください。プログラミングの問題です。 最初に正の整数nの入力を受け付け、次に分数の分子と分 1 2022/07/19 17:03
- Ruby 初心者プログラミング 3 2022/10/12 11:31
- C言語・C++・C# C言語の課題が出たのですが自力でやっても分かりませんでした。 要素数がnであるint型の配列v2の並 3 2022/11/19 17:41
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
fgetsなどのときのstdinのバッ...
-
配列をnビットシフトする
-
CStringをwchar_tに変換したい
-
double型の値をchar配列に変換...
-
コンパイルエラー invalid ope...
-
variant型ってどのような仕組み...
-
strchr() の第2引数はなぜ int ...
-
C++ の FileCopy の設定が解り...
-
int main()の・・・
-
_TCHAR*での引数の読み込み
-
c++ 文字列を入力して、一文字...
-
-'0'の意味について
-
コマンドラインに入力されてい...
-
数字文字の出現回数を表示する...
-
文字列がNULLか空文字列かの判定
-
new
-
sprintfに同じ変数は使えるか
-
間接参照のレベルが異なっています
-
charからLPTSTRへの変換方法
-
c言語
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
fgetsなどのときのstdinのバッ...
-
charでの計算?
-
C言語のfor文です。 繰り返しの...
-
charからLPTSTRへの変換方法
-
文字列から空白を取り除きたい...
-
C言語の入力した文字を反転させ...
-
'const char *' 型は 'char *' ...
-
配列をnビットシフトする
-
str系関数を使わずに二つの文字...
-
int main()の・・・
-
atoi( ) の反対をやりたい
-
CStringをwchar_tに変換したい
-
c++ 文字列を入力して、一文字...
-
switch文で文字を比較すること...
-
干支のプログラム
-
3桁区切(コンマ)記号をつけ...
-
絶対パスからのファイル名の切...
-
間接操作のレベルとは
-
間接参照のレベルが異なっています
-
型変換
おすすめ情報