繁体   English   中英

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

[英]Access to a specific element on an array using pointers C

我正在努力取代“。” 用“ ::”来表示。 我给了一个包含30个角色的短语,而没有使用其他数组。 我想使用指针访问最后一个元素。

但是,首先,我数一下短语中的点。

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--;
}

您编写的代码不起作用((您进行了一些拼写操作,例如,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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM