[英]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.