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

时间:2015-12-02 17:25:49

标签: c string pointers atoi

我正在编写一个程序,它接受一个字符串作为输入,例如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;

}

1 个答案:

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