3

C++ で文字列を操作しようとしています。私はArduinoボードで作業しているため、使用できるものが限られています。私はまだC ++も学んでいます(愚かな質問で申し訳ありません)

ここで私がしなければならないことは次のとおりです。時速マイルを 7 セグメント ディスプレイに送信する必要があります。したがって、17.812345 などの数値がある場合は、7 セグメント ディスプレイに 17.8 を表示する必要があります。最も効率的な方法と思われるのは、最初に 10 を掛けて (これは小数点を 1 桁右にシフトすることです)、次に 178.12345 を int にキャストします (小数点を切り取ります)。私が立ち往生している部分は、分解する方法です 178.Pythonでは文字列をスライスできましたが、C++でこれを行う方法について何も見つかりません(または、少なくとも、検索する適切な用語が見つかりません)為に)

4 つの 7 セグメント ディスプレイと 1 つの 7 セグメント ディスプレイ コントローラーがあります。時速 10 分の 1 マイルまで測定できます。あなたが私に提供できる援助と情報をありがとう。

4

5 に答える 5

10

文字列に変換せず、算術演算を使用して数字を区切るのがおそらく最も簡単でしょう。

float speed = 17.812345;
int display_speed = speed * 10 + 0.5;     // round to nearest 0.1 == 178
int digits[4];
digits[3] = display_speed % 10;           // == 8
digits[2] = (display_speed / 10) % 10;    // == 7
digits[1] = (display_speed / 100) % 10;   // == 1
digits[0] = (display_speed / 1000) % 10;  // == 0

そして、コメントで指摘されているように、各桁の ASCII 値が必要な場合:

char ascii_digits[4];
ascii_digits[0] = digits[0] + '0';
ascii_digits[1] = digits[1] + '0';
ascii_digits[2] = digits[2] + '0';
ascii_digits[3] = digits[3] + '0';
于 2009-12-05T06:56:59.883 に答える
4

これは、モジュラス計算なしでC ++で実行できる方法です(どちらの方法でも問題ないようです):

#include "math.h"
#include <stdio.h>
#include <iostream.h>

int main( ) {

        float value = 3.1415;
        char buf[16]; 
        value = floor( value * 10.0f ) / 10.0f;
        sprintf( buf, "%0.1f", value );

        std::cout << "Value: " << value << std::endl;

        return 0;
}
于 2009-12-05T07:31:52.057 に答える