我正在编写一个程序,它接受一个字符串作为输入,例如35x40x12。我想使用int指针将数字存储为单独的元素。到目前为止,我已设法做到这一点,以便单位数字工作,即3x4x6工作,但是如果我输入两位数字,如35x40x12,35将存储在第一个位置,但是在第二个位置它也将从35存储5,它对于位置3和4也是如此。如何删除此重复项?
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int present(int l, int w, int h);
int *stringC (char *z);
int main(int argc, char *argv[])
{
char *d = "53x23x4";//input
printf("%d", *(stringC(d)+2));//whatever's stored in pointer position
return 0;
}
int *stringC (char *z)
{
int i;
int *k = malloc(sizeof(int)*20);
int j = 0;
for(i=0; z[i] !='\0';i++)
{
if( z[i]!= 'x')
{
k[j]=atoi(&z[i]);
j++;}
}
return k;
}
答案 0 :(得分:0)
正如其他人所说,学会调试。这将是值得的!
看看strtok
。来自man strtok
:
strtok()
函数将字符串解析为一系列标记。
这些令牌被分隔为"x"
等分隔符。因此,为了解析数字,请使用以下内容:
char d[] = "53x23x4";
int array[3];
char* it = strtok(d, "x");
for (size_t i = 0; i < sizeof(array) / sizeof(*array) && it; ++i, it = strtok(NULL, "x"))
array[i] = atoi(it);
注意 d
指向自动且可写字符串。 strtok
修改字符串的内容,因为字符串文字修改会产生未定义的行为,所以需要在可写的位置分配字符串。
而不是array
使用一些动态内存分配机制而你拥有它。这使您免于正在使用的这种不方便的麻烦。
注意:
char*
指向字符串文字。请改用const char*
。这可以防止您尝试修改字符串文字(未定义的行为)时的细微错误。