我正在努力取代'。'用'::'在短语中。 我给了一个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--;
}
答案 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