Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/56.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何修改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 - Fatal编程技术网

如何修改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以使用指针。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秒后退出,返回值为

/*输出

rmchr函数调用字符串之前=abracadabra rmchr函数调用字符串后=brcdbr

rmchr函数调用字符串之前=abracadabra rmchr函数调用字符串后=aracadara

rmchr函数调用字符串之前=abracadabra rmchr函数调用字符串后=abracadabra

rmchr函数调用字符串之前=aaaa rmchr函数调用字符串之后=

rmchr函数调用字符串之前=aaaa rmchr函数调用字符串后=aaaa


进程在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;
}