我在为学校教育分配的一些工作上遇到了一些麻烦。我被告知编写一个修改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;
答案 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;