0

getline が C++ 標準であることはわかっていますが、1 行の数字を読み取る必要があります。

123856

そしてそれを配列に保存します。しかし、与えられた (入力としての) 数字の間にスペースを入れずにこれを行うにはどうすればよいでしょうか? ユーザー入力を次のようにしたい:

123856 (スペースなし) を配列 (n 要素配列) に保存し、その後、配列を次のようにします。

array[0] = 1;
array[1] = 2;
array[2] = 3;
array[3] = 8;
array[4] = 5;
array[5] = 6;

しかし、Cでそれを作る方法はgetline

これは私が望むものではありません:

#include <stdlib.h>
#include <stdio.h>
#include <ctype.h>
#include <string.h>
#include <stdbool.h>

int main(int argc, char **argv)
{
    int t[4];
    int i;

    for(i=0; i<4; i++)
        scanf("%d", &t[i]);
    for(i=0; i<4; i++)
        printf("%d\n", t[i]);

    return 0;
}
4

6 に答える 6

3

あなたが正しいと理解した場合、次のようにする必要があります。

  1. 行全体を読む
  2. 数字を取得するか、文字列が終了する限り、文字列をループします
  3. 数字ごとに、その値を配列に配置し、インデックスを1増やします
于 2013-01-23T14:04:51.217 に答える
3
while( ( c = getchar()) != EOF  &&  c != '\n' &&  i < max ) {
    /* If desired, add check for value outside of 0-9 */
    array[ i++ ] = c - '0';
    ...
}
于 2013-01-23T14:04:58.383 に答える
1
char arr[] = "1234567";
int intarr[10];

int count = 0;
for (char* ptr = arr; *ptr; ptr++) {
  intarr[count] = *ptr - '0';
  count++;
}
于 2013-01-23T14:05:58.437 に答える
0

これを試して

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

 main (int argc, char *argv[])
{

    FILE *f;


    int i=0;
    int j=0;
    char output[100];
    char* output1[100];
    char string[100];
    char delims1[] = " ";
    char delims2[] = "*";
    char* result = NULL;
    char* result3 = NULL;
    int num;



//for (j=0; j<2; j++)
//{
    //printf("%s",delims9[6]);
//}

f = fopen("text.txt","r");
   //
    while( fgets(string,sizeof(string),f) )
    {

        result = strtok( string, delims1 );

        while( result != NULL )
        {
            output1[i]=result;
          printf("%s\n",output1[i]);
          result = strtok( NULL, delims1 );
            i++;

        }

    for (num = 0; num < 100; i++ )      //
    {                                   // Error On this array
        printf("%s\n", output1[i]);     //
    }                                   //


    }
printf("\n%d",i/3+1);



    return 0 ;
}
于 2013-01-23T14:09:03.110 に答える
0

わかりました、文字列を使用せずに。

int digits = 123856;
int numofdigits = 1 + floor(log10(digits));

int digits_arr[numofdigits];
int i;
for(i = numofdigits-1; i >= 0; i--) {
    digits_arr[i] = (int)floor(digits / pow(10, i)) % 10;
}
于 2013-01-23T14:31:49.060 に答える
-1

以下のリンクを試してください...同じ質問がここで尋ねられ、解決策が得られます...

整数を配列に変換します

char * convertNumberIntoArray(unsigned int number) {
    unsigned int length = (int)(log10((float)number)) + 1;
    char * arr = (char *) malloc(length * sizeof(char)), * curr = arr;
    do {
        *curr++ = number % 10;
        number /= 10;
    } while (number != 0);
    return arr;
}
于 2013-01-23T14:14:12.237 に答える