簡體   English   中英

在C ++中反轉字符串

[英]Reversing string in C++

在下面的字符串交換代碼部分

 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;
}

我不了解地址部分。

給定

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是指針,因此必須將其分配給某物的地址(此處為字符串的最后一個字符的地址)。

當我沒有尋址部分時,它仍然運行

我認為不會-您應該有一個編譯錯誤

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

您應該知道end的類型是char* ,但是str[len-1]的類型是char ,因此您需要將類型str[n-1]更改為char* ,因此您需要&str[len-1]

但是,如果使用string ,將有一個簡單的方法:

使用STL的std :: reverse方法:

std :: reverse(str.begin(),str.end()); // str應該是字符串類型

您將必須包含“算法”庫#include。

也許這可以幫助

void reverse (char word[])
{
   int left = 0;
   int right = strlen(word) - 1;

   while (left < right)
   {
      char temp = word[left];
      word[left] = word[right];
      word[right] = temp;
      left++;
      right--;
   }
   cout << word;

}

我希望這能給你這個主意。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM