这是一个业余问题。我搜索了关于这个主题的其他帖子,发现了很多结果,但我还没有理解解决方案背后的概念。
这是我的C ++书籍中的练习题。它没有分配作业。 [这里的说明] [1]。
我想做什么:
string input;
getline(cin, input); //Get the user's input.
int front = 0;
int rear;
rear = input.size();
问题是我要做什么
string input;
getline(cin, input); //Get the user's input.
int* front = 0;
int* rear;
rear = input.size();
错误:无法将类型为“size_t”的值分配给int *
类型的实体这对我来说很有意义,因为你不能将int的'address'分配给int的值。 所以我的问题是:
谢谢你们。我知道你喜欢帮助自助的用户,所以我先做了一些研究。我现在对指针的概念感到非常恼火,而不仅仅是使用实际变量本身。
我之前读过的关于这个主题的帖子:
[例3] [4]
[1]:http://i.imgur.com/wlufckg.png“说明” [2]:How does reversing a string with pointers works“发布1” [3]:Reverse string with pointers?“Post 2” [4]:Reverse char string with pointers“发布3”
答案 0 :(得分:3)
string.size()不返回指针 - 它返回size_t。
要恢复字符串,请尝试改为:
string original = "someText"; // The original string
string reversed = original; // This to make sure that the reversed string has same size as the original string
size_t x = original.size(); // Get the size of the original string
for (size_t i = 0; i < x; i++) // Loop to copy from end of original to start of reversed
{
reversed[i]=original[x-1-i];
}
如果你真的(出于一些奇怪的原因)需要指针试试这个:
string input;
getline(cin, input); //Get the user's input.
char* front = &input[0];
char* rear = &input[input.size()-1];
但我不会将指针用于字符串。不需要它。
答案 1 :(得分:1)
我是客人,你可能不太明白这里的问题。此问题要求您复制C字符串然后通过指针操作REVERSE它。标准C中没有类。因此,C字符串与C ++中的字符串类完全不同。它实际上是以字符'\ 0'结尾的char类型元素数组。
了解了这一点后,您可能会开始理解这里的问题。如果要复制C字符串,则不能只使用str_a = str_b
。你需要构造函数。但是,在纯C风格中,首先应该为字符串请求内存空间(这里可以使用malloc
),然后复制每个元素。例如,您要创建一个函数来复制输入字符串
#include <string.h>
char *strcopy(char* str_in) {
int len = strlen(str_in);
char *str_out = (char*)malloc(len+1);
char *in = str_in;
char *out = str_out;
while(*in != '\0') { *out++ = *in++; }
return str_out;
}
如您所见,我们实际上在这里使用char*
而不是int*
来操作字符串元素。您应该首先区分指针(例如in
)和指针指向的元素(例如*in
)。
我将为您的问题向您展示纯C风格的解决方案,我希望这有助于您理解它。 (你应该可以不加修改地编译它)
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
char* strreverse(char* in){
// length of input string
int len = strlen(in);
// allocate memory for string operation
char *out = (char*)malloc(len+1);
// initialize <front> and <end>
char *front = out, *end = out + len - 1;
char buffer;
// copy input string
for(int i = 0; i <= len; i++){ out[i] = in[i]; }
// reverse string
for(; front < end; front++, end--) {
buffer = *front;
*front = *end;
*end = buffer;
}
return out;
}
int main() {
printf("REVERSE >> %s\n", strreverse("Hello, World!"));
return 0;
}
这不是你在实际编程中用C ++做的,但是,我想这里的问题是试图让你理解指针的机制。在这方面,原创C风格会有很大帮助。