カンマで区切られた文字を整数に変換したい

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
tsuka
記事: 4
登録日時: 1年前

カンマで区切られた文字を整数に変換したい

#1

投稿記事 by tsuka » 1年前

シリアル値が送られて来て,以下のように配列に入っています。
最後は\0が送られるようです。

dat[0]='1' dat[1]=',' dat[2]='2' dat[3]='3'
dat[4]=',' dat[5]='4' dat[6]='5' dat[7]='6'
dat[8]=',' dat[9]='\0'

カンマで区切られて送られてきた文字を
整数に変換して配列に入れたいのですが
やり方が分からないので教えて頂きたい
です。

d[0]=1 d[1]=23 d[2]=456

アバター
みけCAT
記事: 6734
登録日時: 13年前
住所: 千葉県
連絡を取る:

Re: カンマで区切られた文字を整数に変換したい

#2

投稿記事 by みけCAT » 1年前

例えば、以下のようにするとできるでしょう。

配列の要素を前から順番に見ていきます。
・要素が数字の場合は、変換結果を更新します。(要求に応じて新しい変換結果を作成します)
・要素がカンマの場合は、新しい変換結果の作成を要求するフラグを立てます。

Pythonで実装してみました。

コード:

dat = list(range(10))
dat[0]='1'
dat[1]=','
dat[2]='2'
dat[3]='3'
dat[4]=','
dat[5]='4'
dat[6]='5'
dat[7]='6'
dat[8]=','
dat[9]='\0'

requestNewElement = True
d = []
for elem in dat:
	if elem.isdecimal():
		if requestNewElement:
			d.append(0)
			requestNewElement = False
		d[-1] = d[-1] * 10 + int(elem)
	elif elem == ',':
		requestNewElement = True
	elif elem == '\0':
		break

print(d)
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)

tsuka
記事: 4
登録日時: 1年前

Re: カンマで区切られた文字を整数に変換したい

#3

投稿記事 by tsuka » 1年前

Pythonのプログラムでしょうか?
Python と C言語の違いがまだわかっていません。
申し訳ありませんが,私にはハードルが高く理解が追いつきません。
カンマで区切られたいろんな数値がシリアルで送られて
質問した内容まで理解ができています。
よろしくお願いします。

アバター
幸尚
記事: 47
登録日時: 1年前
連絡を取る:

Re: カンマで区切られた文字を整数に変換したい

#4

投稿記事 by 幸尚 » 1年前

コード:

#include <stdio.h>

int main()
{
	char dat[15];
	int list[15];
	int i = 0;
	int count = 0;
	memset(dat, 0, sizeof(dat));
	memset(list, 0, sizeof(list));

	dat[0] = '1', dat[1] = ',', dat[2] = '2', dat[3] = '3';
	dat[4] = ',', dat[5] = '4', dat[6] = '5', dat[7] = '6';
	dat[8] = ',', dat[9] = '\0';

	printf("--------------------\n");
	printf("コンマありのデータ\n");
	printf("--------------------\n");
	while (dat[i] != '\0')
	{
		printf("dat[%d] = %c\n", i, dat[i]);
		i++;
	}

	i = 0;
	while (dat[i] != '\0')
	{
		if (dat[i] != ',')
		{
			list[count] = dat[i] - '0';
			count++;
		}
		i++;
	}

	printf("--------------------\n");
	printf("コンマなしのデータ\n");
	printf("--------------------\n");
	i = 0;
	while (list[i] != '\0')
	{
		printf("list[%d] = %d\n", i, list[i]);
		i++;
	}
	return 0;
}
こんな感じでどうでしょうか?

また、質問する前に言語は何かを明確にしたほうが良いと思います。
ボールを違うところに投げてたらご指摘して頂けると嬉しいです(o_ _)o

アバター
みけCAT
記事: 6734
登録日時: 13年前
住所: 千葉県
連絡を取る:

Re: カンマで区切られた文字を整数に変換したい

#5

投稿記事 by みけCAT » 1年前

幸尚 さんが書きました:
1年前
こんな感じでどうでしょうか?
「感じ」の意味が不明確ですが、このプログラムはそのままでは条件を満たしておらず、ダメですね。

実行結果

コード:

--------------------
コンマありのデータ
--------------------
dat[0] = 1
dat[1] = ,
dat[2] = 2
dat[3] = 3
dat[4] = ,
dat[5] = 4
dat[6] = 5
dat[7] = 6
dat[8] = ,
--------------------
コンマなしのデータ
--------------------
list[0] = 1
list[1] = 2
list[2] = 3
list[3] = 4
list[4] = 5
list[5] = 6
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)

アバター
幸尚
記事: 47
登録日時: 1年前
連絡を取る:

Re: カンマで区切られた文字を整数に変換したい

#6

投稿記事 by 幸尚 » 1年前

すいません、なにがいけないのでしょうか?
ボールを違うところに投げてたらご指摘して頂けると嬉しいです(o_ _)o

アバター
幸尚
記事: 47
登録日時: 1年前
連絡を取る:

Re: カンマで区切られた文字を整数に変換したい

#7

投稿記事 by 幸尚 » 1年前

すいません、仕様を勘違いしてました…
上のソースはなしということでお願いします。
ボールを違うところに投げてたらご指摘して頂けると嬉しいです(o_ _)o

アバター
幸尚
記事: 47
登録日時: 1年前
連絡を取る:

Re: カンマで区切られた文字を整数に変換したい

#8

投稿記事 by 幸尚 » 1年前

オフトピック
あと、「C言語何でも質問掲示板」と言う掲示板でこられてる質問者に対してPythonで回答するとかどうかとはおいますが…
ボールを違うところに投げてたらご指摘して頂けると嬉しいです(o_ _)o

アバター
幸尚
記事: 47
登録日時: 1年前
連絡を取る:

Re: カンマで区切られた文字を整数に変換したい

#9

投稿記事 by 幸尚 » 1年前

コード:

#include <stdio.h>
#include <string.h>

int main()
{
	char dat[15];
	char* p;
	char* pa;
	int list[15];
	int digit = 1;
	int b = 0;
	int i = 0;
	int count = 0;
	memset(dat, 0, sizeof(dat));
	memset(list, 0, sizeof(list));

	dat[0] = '1', dat[1] = ',', dat[2] = '2', dat[3] = '3';
	dat[4] = ',', dat[5] = '4', dat[6] = '5', dat[7] = '6';
	dat[8] = ',', dat[9] = '\0';

	printf("--------------------\n");
	printf("コンマありのデータ\n");
	printf("--------------------\n");
	while (dat[i] != '\0')
	{
		printf("dat[%d] = %c\n", i, dat[i]);
		i++;
	}

	p = dat;
	pa = dat;

	while (p = strchr(p, ','))
	{
		for (i = 0; i < p - pa; i++)
		{
			*pa = *(pa + i);
			int num = *pa - '0';
			b += num;
			list[count] = b;
			b *= (digit * 10);
		}

		p++;
		pa = p;
		count++;
		b = 0;
		digit = 1;
	} 

	printf("--------------------\n");
	printf("コンマなしのデータ\n");
	printf("--------------------\n");
	i = 0;
	while (list[i] != '\0')
	{
		printf("list[%d] = %d\n", i, list[i]);
		i++;
	}

	return 0;
}
出力結果

コード:

--------------------
コンマありのデータ
--------------------
dat[0] = 1
dat[1] = ,
dat[2] = 2
dat[3] = 3
dat[4] = ,
dat[5] = 4
dat[6] = 5
dat[7] = 6
dat[8] = ,
--------------------
コンマなしのデータ
--------------------
list[0] = 1
list[1] = 23
list[2] = 456
出力結果2

コード:

--------------------
コンマありのデータ
--------------------
dat[0] = 1
dat[1] = 3
dat[2] = ,
dat[3] = 3
dat[4] = 3
dat[5] = 4
dat[6] = ,
dat[7] = 6
dat[8] = ,
--------------------
コンマなしのデータ
--------------------
list[0] = 13
list[1] = 334
list[2] = 6
かなり汚く不細工なソースになり申し訳ございません。
ボールを違うところに投げてたらご指摘して頂けると嬉しいです(o_ _)o

tsuka
記事: 4
登録日時: 1年前

Re: カンマで区切られた文字を整数に変換したい

#10

投稿記事 by tsuka » 1年前

ありがとうございます。こんなにすぐに解決するとは思いもしませんでした。
このプログラムは,ポインタというものを使用しているのですね?
まだまだ,そこまで私の知識が及んでいませんので,参考にさせて頂きながら勉強をすすめていきたいと思います。ありがとうございました。

tsuka
記事: 4
登録日時: 1年前

Re: カンマで区切られた文字を整数に変換したい

#11

投稿記事 by tsuka » 1年前

何度も質問してすみません。
ポインタというものは,少しハードルが高くポインタを用いないで解決できるプログラムはできないでしょうか?
よろしくお願いします。

dic
記事: 655
登録日時: 13年前
住所: 宮崎県
連絡を取る:

Re: カンマで区切られた文字を整数に変換したい

#12

投稿記事 by dic » 1年前

時代はPython!!

かまわーーん!

アバター
みけCAT
記事: 6734
登録日時: 13年前
住所: 千葉県
連絡を取る:

Re: カンマで区切られた文字を整数に変換したい

#13

投稿記事 by みけCAT » 1年前

tsuka さんが書きました:
1年前
ポインタというものは,少しハードルが高くポインタを用いないで解決できるプログラムはできないでしょうか?
C言語では、式中の配列はsizeofとともに用いるなどの例外を除いて先頭要素へのポインタに変換されます。
X[Y] は、*((X) + (Y)) という意味の糖衣構文(シンタックスシュガー)です。
したがって、C言語ではポインタを用いずに配列の要素にアクセスするのは無理であると考えられます。
すなわち、ポインタを用いるのを回避するためにはC言語以外を使うのがいいでしょう。

Rubyで実装してみました。

コード:

dat = []
dat[0]='1'
dat[1]=','
dat[2]='2'
dat[3]='3'
dat[4]=','
dat[5]='4'
dat[6]='5'
dat[7]='6'
dat[8]=','
dat[9]='\0'

d = []
requestNewElement = true
dat.each do |elem|
  if elem == ','
    requestNewElement = true
  elsif elem == '\0'
    break
  else
    if requestNewElement
      d << 0
      requestNewElement = false
    end
    d[-1] = d[-1] * 10 + elem.to_i
  end
end

print d
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)

アバター
あたっしゅ
記事: 663
登録日時: 13年前
住所: 東京23区
連絡を取る:

Re: カンマで区切られた文字を整数に変換したい

#14

投稿記事 by あたっしゅ » 1年前

東上☆海美☆「
なんだかなぁ。

まず、たしかに、『C言語何でも質問掲示板』と名乗っているけど、C 言語じゃない質問もあるので、
今は『プログラマ専用 SNS ミクプラ』の方がメインなんじゃないの ?

で、『ハードルが高い』ばかり言ってる方だが、gcc つかってるなら gdb 使ってるよね。

https://www.tohoho-web.com/ex/draft/gdb.htm
GDB 入門 - とほほの WWW 入門(ja)

ポインタを Watch して、ステップ実行すれば、理解しやすいんじゃないの ?
VTuber:
東上☆海美☆(とうじょう・うみみ)
http://atassyu.php.xdomain.jp/vtuber/index.html
レスがついていないものを優先して、レスするみみ。時々、見当外れなレスしみみ。

中の人:
手提鞄あたッしュ、[MrAtassyu] 手提鞄屋魚有店
http://ameblo.jp/mratassyu/
Pixiv: 666303
Windows, Mac, Linux, Haiku, Raspbery Pi, Jetson Nano, 電子ブロック 持ち。

返信

“C言語何でも質問掲示板” へ戻る