2015-12-02 120 views
0

我正在編寫一個程序,它接受一個字符串作爲輸入,例如, 35x40x12。然後我想使用一個int指針將這些數字存儲爲單獨的元素。到目前爲止,我已經設法做到這一點,使單個數字的數字工作,即3x4x6的作品,但如果我把兩個數字的數字,如35x40x12,35將存儲在第一個位置,但在第二個位置,它也將從35中存儲5個,它對於位置3和4也是40個。我如何消除這種重複?將字符指針轉換爲字符串指針,消除重複

#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

您想了解如何起訴調試器,以便能夠瀏覽您的代碼並查看究竟發生了什麼。這裏還有一些有用的提示:http://ericlippert.com/2014/03/05/how-to-debug-small-programs/ – alk

+1

「atoi」之後,您必須前進到下一個「x」或字符串終止符,但'i'仍然索引你剛剛轉換的數字的一部分。這就是爲什麼它只適用於單位數字。更好的是,前進到下一個非數字,以便您的算法可以處理不同的算術運算符。 –

+0

C沒有特定的'string'類型。 – Olaf

回答

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*。這可以防止在您嘗試修改字符串文字(未定義的行爲)時出現細微的錯誤。
+0

謝謝!我不確定你會如何在C中使用分隔符。 – condog