如何修改rmchr以使用指针。I';我已经能够让我的代码按原样运行,但分配需要使用指针 #包括 #包括 void rmchr(字符*字符串,字符a) { int i,j; for(i=0;字符串[i]!='\0';i++)//循环到'\0'字符 { 如果(string[i]==a){//检查给定字符是否等于i处的chr for(j=i;string[j]!='\0';j++)//从i到字符串结束的循环 { 字符串[j]=字符串[j+1];//用下一个字符交换值 } string[j]='\0';//将终止字符分配给字符串的索引 i--;//减量i } } } int main() { 字符str1[]=“abracadabra”; 字符str2[]=“abracadabra”; 字符str3[]=“abracadabra”; 字符str4[]=“aaaa”; 字符str5[]=“aaaa”; printf(“在rmchr函数调用字符串=%s\n之前”,str1); rmchr(str1,'a'); printf(“在rmchr函数调用字符串=%s\n\n之后”,str1); printf(“在rmchr函数调用字符串=%s\n之前”,str2); rmchr(str2,'b'); printf(“在rmchr函数调用字符串=%s\n\n之后”,str2); printf(“在rmchr函数调用字符串=%s\n之前”,str3); rmchr(str3,'n'); printf(“在rmchr函数调用字符串=%s\n\n之后”,str3); printf(“在rmchr函数调用字符串=%s\n之前”,str4); rmchr(str4,'a'); printf(“在rmchr函数调用字符串=%s\n\n之后”,str4); printf(“在rmchr函数调用字符串=%s\n之前”,str5); rmchr(str5,'n'); printf(“在rmchr函数调用字符串=%s\n之后”,str5); }
/*输出 rmchr函数调用字符串之前=abracadabra rmchr函数调用字符串后=brcdbr rmchr函数调用字符串之前=abracadabra rmchr函数调用字符串后=aracadara rmchr函数调用字符串之前=abracadabra rmchr函数调用字符串后=abracadabra rmchr函数调用字符串之前=aaaa rmchr函数调用字符串之后= rmchr函数调用字符串之前=aaaa rmchr函数调用字符串后=aaaa如何修改rmchr以使用指针。I';我已经能够让我的代码按原样运行,但分配需要使用指针 #包括 #包括 void rmchr(字符*字符串,字符a) { int i,j; for(i=0;字符串[i]!='\0';i++)//循环到'\0'字符 { 如果(string[i]==a){//检查给定字符是否等于i处的chr for(j=i;string[j]!='\0';j++)//从i到字符串结束的循环 { 字符串[j]=字符串[j+1];//用下一个字符交换值 } string[j]='\0';//将终止字符分配给字符串的索引 i--;//减量i } } } int main() { 字符str1[]=“abracadabra”; 字符str2[]=“abracadabra”; 字符str3[]=“abracadabra”; 字符str4[]=“aaaa”; 字符str5[]=“aaaa”; printf(“在rmchr函数调用字符串=%s\n之前”,str1); rmchr(str1,'a'); printf(“在rmchr函数调用字符串=%s\n\n之后”,str1); printf(“在rmchr函数调用字符串=%s\n之前”,str2); rmchr(str2,'b'); printf(“在rmchr函数调用字符串=%s\n\n之后”,str2); printf(“在rmchr函数调用字符串=%s\n之前”,str3); rmchr(str3,'n'); printf(“在rmchr函数调用字符串=%s\n\n之后”,str3); printf(“在rmchr函数调用字符串=%s\n之前”,str4); rmchr(str4,'a'); printf(“在rmchr函数调用字符串=%s\n\n之后”,str4); printf(“在rmchr函数调用字符串=%s\n之前”,str5); rmchr(str5,'n'); printf(“在rmchr函数调用字符串=%s\n之后”,str5); },c,string,pointers,C,String,Pointers,/*输出 rmchr函数调用字符串之前=abracadabra rmchr函数调用字符串后=brcdbr rmchr函数调用字符串之前=abracadabra rmchr函数调用字符串后=aracadara rmchr函数调用字符串之前=abracadabra rmchr函数调用字符串后=abracadabra rmchr函数调用字符串之前=aaaa rmchr函数调用字符串之后= rmchr函数调用字符串之前=aaaa rmchr函数调用字符串后=aaaa 进程在0.015秒后退出,返回值为
进程在0.015秒后退出,返回值为0 按任意键继续。
*/表达式
a[i]
定义为等同于*(a+i)
。用这种转换修改代码就足以满足指针要求,因为我理解您的问题
如果您希望递增和递减指针变量而不是整数索引,那么请考虑:
#include <stdlib.h>
#include <stdio.h>
void rmchr(char *string, char a)
{
int i, j;
for (i = 0; string[i] != '\0'; i++) //loop till '\0' character
{
if (string[i] == a) { //check given character is equal to chr at i
for (j = i; string[j] != '\0'; j++) // loop from i till string end
{
string[j] = string[j+ 1]; // swap value with next char
}
string[j] = '\0'; //assign terminating char to lasts index of string
i--; //decrement i
}
}
}
int main()
{
char str1[] = "abracadabra";
char str2[] = "abracadabra";
char str3[] = "abracadabra";
char str4[] = "aaaa";
char str5[] = "aaaa";
printf("Before rmchr function call string= %s\n", str1);
rmchr(str1, 'a');
printf("After rmchr function call string= %s\n\n", str1);
printf("Before rmchr function call string= %s\n", str2);
rmchr(str2, 'b');
printf("After rmchr function call string= %s\n\n", str2);
printf("Before rmchr function call string= %s\n", str3);
rmchr(str3, 'n');
printf("After rmchr function call string= %s\n\n", str3);
printf("Before rmchr function call string= %s\n", str4);
rmchr(str4, 'a');
printf("After rmchr function call string= %s\n\n", str4);
printf("Before rmchr function call string= %s\n", str5);
rmchr(str5, 'n');
printf("After rmchr function call string= %s\n", str5);
}
它使用的是指针……这也是我的想法,但我的教授把它还给了我,说我需要有“string[i]”和“string[j]的指针你的教授应该读一本好的C语言书。你不能用数组来做任何有用的事情,这都是指针。他最好告诉你如何编写常量正确的代码,而不要使用像
main()
,这应该是原型样式main(void)
。不管怎样,索引运算符的定义都是为了在指针上工作。我认为编写可读代码,而不是编写不太清晰的加法/反义词语法是没有问题的。@Olaf:我同意有更好的方法教指针如何工作。
char *p = string;
int i = 0;
while (string[i]) {
assert(*p == string[i]);
++i;
++p;
}