文字列をさまざまな整数に変換するにはどうすればよいですか?たとえば:char *を文字列に変換するには?
char *ray = {'2','1','F',' ','2','3'}; //numbers can be any length
私はにそのライン上で変換することができますどのよう
:
int num = 21;
int num2 = 23;
文字列をさまざまな整数に変換するにはどうすればよいですか?たとえば:char *を文字列に変換するには?
char *ray = {'2','1','F',' ','2','3'}; //numbers can be any length
私はにそのライン上で変換することができますどのよう
:
int num = 21;
int num2 = 23;
は、あなたの区切り文字として任意の数字以外の文字があるとします。そして、あなたは、私が「線」に文字列全体の入力を取っています、ここでは、このOUT->
#include <stdio.h>
#include<string.h>
#define MAX 100
int main() {
int a,flag=0,len,num_count=0,limit;
char ray[MAX];
fgets(ray,MAX-1,stdin);
len=strlen(ray);
int *numbers=(int*)calloc(sizeof(int),((len/2)+1));
for(a=0;a<len;a++){
if(ray[a]>='0' && ray[a]<='9'){
flag=1;
numbers[num_count]=(numbers[num_count]*10)+ray[a]-'0';
}
else{
if(flag!=0){
flag=0;
num_count++;
}
}
}
limit=(flag==0)?num_count:num_count+1;
for(a=0;a<limit;a++)
printf("%d\n",numbers[a]);
free(numbers);
return 0;
}
ロジックについてさらに明確化が必要な場合は、教えてください。
文字列をさまざまな整数に変換するにはどうすればよいですか?
C文字列から整数を抽出する方法はいくつかあります。最初の2つは、sscanf()
関数と、さまざまな文字列から整数への変換関数(strtol()
など)です。まず第一に、しかし、あなたは実際の文字列持っている必要があります。
char ray[] = "21F 23"; /* terminator is implicit */
:
char ray[] = {'2','1','F',' ','2','3', '\0' }; /* note the terminator */
またはこのことは、前に100%相当です。これも動作します...
char *ray = "21F 23"; /* terminator is implicit */
...同じではありませんが...。 例宣言は、終端されていないため、文字列ではありません。さらに、ポインタと宣言された変数の配列初期化子を提供します。ポインタと配列は密接に関連していますが、それらは非常に異なるものです。 ray
のため、これらの宣言のいずれかを考える
は、あなたがして
int num;
int num2;
int result = sscanf(ray, "%d%*[^0-9-]%d", &num1, &num2);
を行う可能性がありますsscanf()
機能はscanf()
のようですが、それは、文字列からではなく、標準入力からスキャンします。私は、あなたがオプションで符号付き10進整数をスキャンするためのフィールド記述子である%d
をよく知っていると思います。 2つの%d
記述子の間のビットは、スキャンされているが、任意の変数(*
)に割り当てられていないフィールドを記述し、小数点またはハイフン/マイナス記号ではない1つ以上の文字のシーケンスで構成されています。明らかに、scanfベースのソリューションでは、文字列の中で期待される数字の数(この場合は2)を知っていることを前提としています。
文字列に含まれる数字の数が不明な場合は、おそらくstrtol()
の周りにソリューションを構築する方が簡単でしょう。この関数は、文字列のの最初の部分を整数に変換しようとし、成功した場合、変換された部分に続く文字列の末尾へのポインタを返します。これを使って文字列を歩き、行くごとに見つけた番号を変換することができます。
OPの例ヌルで終了する文字列と、 'sscanf'や' strtol'のようなものにどのような影響を与えるかは使用しません。 –
@CareyGregory、はい、それは私が私の答えの最初の部分を費やしたものです。私はそれをより明確にするために、私のコメントのその部分を広げました。 –
なぜ 'fgets'の複雑さを追加するのですか?おそらくOPはまだI/Oについて知りません。 –
バッファオーバーフローの問題が発生しやすいので、私は基本的に、廃止されたgets()の代わりにfgets()を使用しました。 – RwitamB
いいえ、私は単純になぜファイルから読み込むのかを意味していましたか? OPはそうしていないし、まだI/Oについて知りません。 –