将字符指针转换为字符串指针,去除重复

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*。这可以防止在您尝试修改字符串文字(未定义行为)时出现细微错误。