修改指针值

时间:2013-05-13 05:26:49

标签: c++ function pointers char

我在为学校教育分配的一些工作上遇到了一些麻烦。我被告知编写一个修改char的程序。我能做到的就好了。我只是不知道如何使用指针。我研究了这个,并找到了一些解决方案。但他们不符合作业的需要。有人告诉我要定义一个完全像这样的函数:

int stripWhite(char *userInput)

所以我做到了。唯一的问题是,我相信这会产生价值的副本。而且不会修改实际值。所以这里有一些代码从我的程序中挑选出来:

在main中,我声明了我的char,并使用cin.getline来收集我的输入。然后我打电话给stripwhite。然后我cout我的char。价值永远不会改变。分配表明stripwhite需要完全按照上面的定义。我在这里输了。有什么帮助吗?

char userInput[100];
int spaces = 0;
cin.getline(userInput,99);
spaces = stripWhite(userInput);
cout << userInput;

3 个答案:

答案 0 :(得分:4)

stripWhite被定义为接收指向char的指针,该指针制作原始数据的副本 - 它传递指向原始数据的指针,因此修改{{1 *userInput内部将修改传递地址的原始字符串。

简单演示:

stripWhite

结果:

#include <iostream>

void modify(char *input) { 
    *input = 'a';
}

int main() { 
    char data[] = "ABCD";

    std::cout << data << "\n";
    modify(data);
    std::cout << data << "\n";
    return 0;
}

答案 1 :(得分:1)

你的函数需要一个字符指针。根据函数名称和用法,这个函数可能是将字符缓冲区作为输入并删除所有空格,同时返回删除的空格数。

所以基本上,你必须遍历缓冲区,并在跳过空格时基本上向下移动内容。最简单的方法是保持两个指针并从一个指针复制到另一个指针。

这是我如何做的(警告,未经测试)。 显然,因为这是一项任务,你需要编写自己的代码,但希望这个例子可以解决你的任何误解。

int stripWhite(char* userInput){

    auto inpos = userInput;
    auto outpos = userInput;
    int count = 0;

    while(*inpos){
        if(*inpos != ' '){
            *outpos = *inpos;
            ++outpos;
        } else {count++;}
        ++inpos;
    }

    *outpos = '\0';
    return count;
}

答案 2 :(得分:0)

您可以使您的函数接收指向char的指针,并根据需要更改所有内容。

char stripWhite(char **ptr){
*ptr = "String";
}

char *string;
stripWhite( &string );
cout<< string <<endl;