• ベストアンサー

C言語 プログラミング 関数

文字列を引数とし、それをint型の整数に変換し戻り値として返す関数を作りたいんですが、どのように作ったらいいでしょうか? お願いします。

質問者が選んだベストアンサー

  • ベストアンサー
  • yama5140
  • ベストアンサー率54% (136/250)
回答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 ); } 注:インデントに全角空白を用いています。コピペ後、タブに一括変換して下さい。

tomato1414
質問者

お礼

遅くなりました! わかりやすく説明してくれてありがとうございました。 きちんとプログラムかけました。

その他の回答 (5)

  • jacta
  • ベストアンサー率26% (845/3158)
回答No.5

> いや、僕がその学習をこなせてないからなんですよ↓ では、学習をこなしてから再質問してください。 そうでないと、回答しても内容を理解できないと思います。

tomato1414
質問者

補足

今は理解は必要でなく簡単な形式で書かれた回答がほしいですよ。。 正味それが終わって理解するのも可能だと思うんで、回答があるに越したことはないですね。 だからあっても全く問題ないですよ! ちょっと厚かましいかもですが。。

  • jacta
  • ベストアンサー率26% (845/3158)
回答No.4

> まだ多様なことは習ってませんし 条件をいろいろ後出しされても困ります。 > <stdio.h>と基礎的な学習量のみでコーディングできる範囲なんだと思います。 基礎的な学習量をこなしたのにコーディングできないから質問しているのではないのですか?

tomato1414
質問者

補足

確かにそこは言ってませんでしたが、質問内容から低レベルな質問かなと思ってたんでつい。。 言っておくべきでしたね。すいません↓ いや、僕がその学習をこなせてないからなんですよ↓ 変換の仕方が考え付かない感じですね。。

  • jacta
  • ベストアンサー率26% (845/3158)
回答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; } 仕様が不明な部分は勝手に解釈しました。

tomato1414
質問者

補足

ちょっとこれは理解不能ですね。。w まだ多様なことは習ってませんし<stdio.h>と基礎的な学習量のみでコーディングできる範囲なんだと思います。 回答ありがとうございます!

  • jacta
  • ベストアンサー率26% (845/3158)
回答No.2

引数として渡す書式はどうなっていますか? 変換に失敗した場合の仕様も補足してください。

tomato1414
質問者

補足

すいません書き忘れてました! 文字列定数も数字のみで構成されたものを対象とします。 他の文字で構成された文字列の場合は終了させたいです。

回答No.1

atoi を自作するには http://oshiete1.goo.ne.jp/qa643063.html

tomato1414
質問者

お礼

ありがとうございます! でもよくわかんなかったです汗

関連するQ&A