将字符指针转换为字符串指针,去除重复
converting character pointer to string pointer, removing duplication
我正在编写一个接受字符串作为输入的程序,例如35x40x12。然后我想使用 int 指针将数字存储为单独的元素。到目前为止,我已经设法做到这一点,以便单个数字有效,即 3x4x6 有效,但是如果我输入两位数字,例如 35x40x12,则 35 将存储在第一个位置,但是在第二个位置它也会从 35 存储 5,它也会针对 40 的位置 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] !='[=10=]';i++)
{
if( z[i]!= 'x')
{
k[j]=atoi(&z[i]);
j++;}
}
return k;
}
正如其他人所建议的那样,学习调试。这将是值得的!
看看strtok
。来自 man strtok
:
The
strtok()
function parses a string into a sequence of tokens.
这些标记由分隔符分隔,如 "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*
。这可以防止在您尝试修改字符串文字(未定义行为)时出现细微错误。