使用指针C访问数组上的特定元素

时间:2013-11-17 21:08:10

标签: c arrays pointers

我正在努力取代'。'用'::'在短语中。 我给了一个30个caracteres的短语,没有使用其他阵列。我想使用指针访问最后一个元素。

然而, 首先,我在我的短语中计算点数。

actualSize= 0; i= 0;  dotNumb= 0;
while (i<actualSize){
if (tab[i]=='.') dotNumb++
i++
}

现在我应该从头到尾;每当我发现一个元素,我就会移动它,每当我找到一个'。'我通过复制':'两次进行两次操作。

现在我需要访问此元素标签[dotNumb + actualSize]

我可以这样做,还是应该使用指针。

int newSize = dotNumb+actualSize ;
int j=newSize ;
int cursor=actualSize;

while (j>0){
if (tab[i]!='.') {tab[j]=tab[cursor]; }
else{tab[j]=':';tab[--j]=':';}
cursor--; j--;
}

1 个答案:

答案 0 :(得分:0)

你编写的代码不起作用,(你做了一些拼写错误,例如,actualSize设置为0,因此计算点数的循环将永远不会执行。代码的逻辑将删除原始点中的字符前面的字符数组)。你可能想要这样的东西:

#include <stdio.h>
#include <string.h>
#include <stdlib.h>

int main(void) {
    char *tab = malloc(30 + 1);
    if (tab == NULL) {
        return -1;
    }
    strcpy(tab, "123456789.123456789.123456789.");
    printf("Original string: %s\n", tab);
    size_t actualSize = strlen(tab);

    int dotNumb = 0;
    for (int i = 0; i < actualSize; i++) {
        if (tab[i]=='.') {
            dotNumb++;
        }
     }
     const size_t newSize = dotNumb + actualSize + 1;
     tab = realloc (tab, newSize);
     if (tab == NULL) {
         /* leak memory previously allocated in tab */
         return -1;
     }
     tab[newSize] = '\0'; /* termination character */
     int j = newSize ;
     for (size_t cursor = actualSize; cursor > 0; cursor--) {
         if (tab[cursor] != '.') {
             tab[j--] = tab[cursor];
         }
         else { 
             tab[j--] = ':';
             tab[j--] = ':';
         }
    }
    printf("Modified string: %s\n", tab);
    return 0;
}

您可以在此处测试代码: http://ideone.com/YOxJKo