编写一个程序,该程序接受用户的C字符串输入并反转该字符串的内容。您的程序应通过使用两个指针来工作。 “ head”指针应设置为字符串中第一个字符的地址,而“ tail”指针应设置为字符串中最后一个字符(即终止null之前的字符)的地址。程序应交换这些指针引用的字符,将“ head”增加以指向下一个字符,将“ tail”减少以指向倒数第二个字符,依此类推,直到所有字符都被交换并且整个字符串反转。 预期的行为: 输入输入文字 大家好 syug olleh
这是任务分配。 这是我的代码:
#include <iostream>
#include <cstdlib>
#include <cstring>
using namespace std;
int main()
{
char inp_str[50];
char* hl;
char *tl;
cout<<"Enter string ";
scanf("%s",inp_str);
hl=&inp_str[0];
tl=strchr(inp_str,'\0')-1;
for (hl; hl <= tl; hl++){
for(tl;tl>= hl;tl--) {
char temp_val;
temp_val=*hl;
*hl=*tl;
*tl=temp_val;
}
}
cout<<inp_str;
return 0;
}
我遇到错误
"expression result unused [-Wunused-value]" for tl in for(tl;tl>= hl;tl--) and hl in for (hl; hl <= tl; hl++).
答案 0 :(得分:2)
数组名称是指向数组(第一个元素)的指针。
scanf("%s", inp_str);
您的主要错误是您使用了两个循环,而您只应使用一个循环
不是
for (hl; hl <= tl; hl++){
for(tl;tl>= hl;tl--)
{
char temp_val;
temp_val=*hl;
*hl=*tl;
*tl=temp_val;
}
}
但是
for (; hl <= tl; hl++, tl--)
{
char temp_val;
temp_val=*hl;
*hl=*tl;
*tl=temp_val;
}
考虑反转字符串的过程,该过程需要嵌套循环还是仅需要一个循环?
发生编译器错误是因为您在for循环的第一个表达式中使用了h1
和t1
。这些表达式的结果是未使用的(因此会出现错误),请像我的示例一样将其省略。
PS并未对代码进行太多检查,因此即使进行了上面建议的更改,它也可能不正确。