C - 从字符串中提取所有数字
C - extracting all Numbers from string
我通过读取在线在线的文件得到了一个字符串。 C 是数字之间的分隔符。
3000C9.5452C5.644 ...
现在我想提取所有这些数字并将它们写入一个名为 Matrix 的双精度数组。
fgets(input_string, filesize, infile);
int matrix_size = (int) strtof(input_string, &input_end);
++input_string;
int binary_matrix_size = sizeof (double)*(matrix_size * matrix_size);
double *Matrix = malloc(binary_matrix_size);
for (int index = 0; index < (matrix_size * matrix_size); ++index) {
while (!isdigit(input_string) && input_string) {
++input_string;
}
Matrix[index] = strtod(input_string, &input_end);
input_string = input_end;
}
我试图了解您的需求。
#include<stdio.h>
#include <ctype.h>
#include <stdlib.h>
int main()
{
char *input_string = "2C9.5452C5.644";
char *input_end;
int matrix_size = strtol(input_string, &input_end, 10);
printf("Array size: %d\n", matrix_size);
input_string = input_end;
double *Matrix = malloc(sizeof(double)*(matrix_size));
for (int index = 0; index < matrix_size; ++index) {
while ( (*input_string != '[=10=]') && !isdigit(*input_string) && input_string ) {
++input_string;
}
Matrix[index] = strtod(input_string, &input_end);
printf("Retrieved value: %f\n", Matrix[index]);
input_string = input_end;
}
free(Matrix);
return 0;
}
输出为:
Array size: 2
Retrieved value: 9.545200
Retrieved value: 5.644000
LP回答正确;然而,strtod 需要 stdlib.h(不知道为什么它在 LP 的
上运行
#include <stdio.h>
#include <ctype.h>
#include <stdlib.h>
int main()
{
char *input_string = "2C9.5452C5.644";
char *input_end;
int index = 0;
int matrix_size = strtol(input_string, &input_end, 10);
printf("Array size: %d\n", matrix_size);
++input_string;
int binary_matrix_size = sizeof(double)*(matrix_size);
double *Matrix = malloc(binary_matrix_size);
for (index = 0; index < matrix_size; ++index) {
while ( (*input_string != '[=10=]') && !isdigit(*input_string) && input_string ) {
++input_string;
}
Matrix[index] = strtod(input_string, &input_end);
printf("Retrieved value: %f\n", Matrix[index]);
input_string = input_end;
}
return 0;
}
我通过读取在线在线的文件得到了一个字符串。 C 是数字之间的分隔符。
3000C9.5452C5.644 ...
现在我想提取所有这些数字并将它们写入一个名为 Matrix 的双精度数组。
fgets(input_string, filesize, infile);
int matrix_size = (int) strtof(input_string, &input_end);
++input_string;
int binary_matrix_size = sizeof (double)*(matrix_size * matrix_size);
double *Matrix = malloc(binary_matrix_size);
for (int index = 0; index < (matrix_size * matrix_size); ++index) {
while (!isdigit(input_string) && input_string) {
++input_string;
}
Matrix[index] = strtod(input_string, &input_end);
input_string = input_end;
}
我试图了解您的需求。
#include<stdio.h>
#include <ctype.h>
#include <stdlib.h>
int main()
{
char *input_string = "2C9.5452C5.644";
char *input_end;
int matrix_size = strtol(input_string, &input_end, 10);
printf("Array size: %d\n", matrix_size);
input_string = input_end;
double *Matrix = malloc(sizeof(double)*(matrix_size));
for (int index = 0; index < matrix_size; ++index) {
while ( (*input_string != '[=10=]') && !isdigit(*input_string) && input_string ) {
++input_string;
}
Matrix[index] = strtod(input_string, &input_end);
printf("Retrieved value: %f\n", Matrix[index]);
input_string = input_end;
}
free(Matrix);
return 0;
}
输出为:
Array size: 2
Retrieved value: 9.545200
Retrieved value: 5.644000
LP回答正确;然而,strtod 需要 stdlib.h(不知道为什么它在 LP 的
上运行#include <stdio.h>
#include <ctype.h>
#include <stdlib.h>
int main()
{
char *input_string = "2C9.5452C5.644";
char *input_end;
int index = 0;
int matrix_size = strtol(input_string, &input_end, 10);
printf("Array size: %d\n", matrix_size);
++input_string;
int binary_matrix_size = sizeof(double)*(matrix_size);
double *Matrix = malloc(binary_matrix_size);
for (index = 0; index < matrix_size; ++index) {
while ( (*input_string != '[=10=]') && !isdigit(*input_string) && input_string ) {
++input_string;
}
Matrix[index] = strtod(input_string, &input_end);
printf("Retrieved value: %f\n", Matrix[index]);
input_string = input_end;
}
return 0;
}