在C ++中反转字符串

时间:2017-01-09 01:38:43

标签: c++ string pointers reversing

在字符串交换代码的以下部分

 end = &str[len - 1];

我不理解寻址部分。当我这样做而没有寻址部分它仍然运行但是给了我一个警告,“char类型的值不能分配给char类型的标识”。这是完整的代码:

    #include<iostream>
    #include<cstring>
    using namespace std;

int main()
{
    char str[] = "This is a test";
    char *start, *end; 
    int len;
    int t; 

    cout << "Original " << str << "\n";
    len = strlen(str);
    start = str;
    end = str[len - 1];  

//this reverses the string
    while (start < end) { 

        t = *start;  
        *start = *end; 
        *end = t; 

        start++; 
        end--; 

    }
    cout << "Reversed" << str << "\n";
    system("PAUSE");
    return 0;
}

3 个答案:

答案 0 :(得分:1)

  

我不理解寻址部分。

鉴于

char str[] = "This is a test";
char *start, *end; 
len = strlen(str);

然后end是指向char的指针,

end = &str[len - 1]; // `end` points to the last character (before the `\0`)

您必须使用&(地址)运算符,因为end是指针,因此必须将其分配给某些地址(此处为字符串最后一个字符的地址)。 / p>

  

当我没有寻址部分时,它仍然运行

我认为不会 - 你应该有编译错误

end = str[len - 1]; // invalid conversion from ‘char’ to ‘char*’

答案 1 :(得分:0)

您应该知道end的类型为char*,但str[len-1]的类型为char,因此您需要将str[n-1]更改为{{{ 1}},所以你需要char*

但如果您使用&str[len-1],则会有一个简单的方法:

使用STL中的std :: reverse方法:

std :: reverse(str.begin(),str.end()); // str shoud是字符串类型

您必须包含“算法”库#include。

答案 2 :(得分:0)

也许这可以帮助

server {
    listen 80;
       root /opt/htdocs/bestflare;
    index index.html index.htm;
       server_name bestflare.com;
       location / {
           try_files $uri $uri/ =404;
       }
    }
server {
       listen 80;
       root /opt/htdocs/usefulread;
       index index.html index.htm;
       server_name usefulread.com;
       location / {
           try_files $uri $uri/ =404;
       }
    }

我希望这会给你一个想法。