对于我的作业,我需要做一个程序:
char
获取2个字符串(scanf
格式,最多100个字符),(例如:{1,2,3,4}和{0,1,2,0})strtok
)double
(我正在使用strtod
)在复制我的实际代码之前,我想问你们,如果你们知道如何轻松地学习这种类型的操作;我的考试就是这样,拿字符串做事,解析他们转换它们,但是我很难学习如何。那个男人和我的书都是简化的,我无法理解。
感谢所有人,我希望你能在我疯狂之前帮助我。
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
//TODO TAKE ARGOMENTS
//TODO EXTRACT THE NUMBERS
//TODO CONVERT THEM TO DOUBLE
//TODO DO THE SCALAR PRODUCT
//prototypes:
unsigned manipulate_string(char vet[100]);
//functions:
unsigned manipulate_string(char vet[100]){
const char s[4] = " ,{}";
double vfinal[100];
char *token;
char *stringPtr;
char *todPtr
//get the first token
token = strtok(vet, s);
//walk through other tokens
while( token != NULL ) {
printf( " %s\n", token );
token = strtok(NULL, s);
double d = strtod(vet, &stringPtr);
vfinale[100]=d
return d;
}
}
int main () {
char vet1[100];
char vet2[100];
double vet1f[100];
double vet2f[100];
const char s[4] = " ,{}";
char *token;
printf("inseert first vector\n");
scanf("%[^\n\r]", vet1);
printf("insert second vector\n");
scanf("%[^\n\r]", vet2);
vet1f[100]=manipulate_stringvet1[100]);
vet2f[100]=manipulate_string(vet2[100]);
printf("the first one is\n",vet1f);
printf("the second one is\n",vet2f);
}
现在代码只是关于看到字符串被操纵,之后,不要以为我会有问题去做一个做标量产品的函数。
再次感谢您的帮助和浪费时间。
您的代码中存在很多问题:
vfinal
// vfinale
char *todPtr
vet1f[100]=manipulate_stringvet1[100]);
但是,即使纠正了这些小问题,也需要了解数组操作:
double vfinal[100];
宣布100个double
阵列在这些行中你有同样的问题(4次):
vfinale[100] = d;
你有另一个问题:函数d
不是你想要的:你只能返回一个vet1f[100]=manipulate_string(vet1[100]);
vet2f[100]=manipulate_string(vet2[100]);
而你想要的是修改manipulate_string
(或unsigned char
)数组(应该作为参数传递)
如果我们采用这段代码:
vet1f
我们可以看到两个问题:
vet2f
位于循环内部,在读取最后一个标记之前退出 token = strtok(vet, s);
while( token != NULL ) {
token = strtok(NULL, s);
double d = strtod(vet, &stringPtr);
vfinale[100]=d
return d;
}
之间),您使用前一个读取新标记,因此:
第一个令牌丢失了
当return d;
将是{}
时,它将被传递给token
并且它不是你想要的。大多数编译器可以启用它们的警告,尝试使用NULL
(GCC,clang,icc ...)或/ W4(visual studio)
即使我修复了问题,也只有一件我无法理解的事情:为什么strtod没有转换我的字符串..这是修复的代码
strtod
输出:
-Wall