2017-01-09 43 views
0

在串交換代碼倒車串++

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

*「在** C++ **中反轉字符串」*請不要這樣。不是這樣的。我尊重C和C程序員,他們應該給他們什麼。你有一個專用的字符串類型,你有算法,你有'交換'... C++不僅是'cout'。抱歉,抱怨,但我感到有點難過。 – luk32

+0

我正在通過教科書工作示例。 – Jeff

+0

我會紅旗。認真。我會認爲它是有害的。它教你過時的事情。你永遠不會有這樣的問題在一個適當的C++程序...或者它是一本C書嗎?這看起來像使用'cout'的C代碼。這就是C程序員15到20年前用來教C++的原因。至少那是我的經驗。 – luk32

回答

1

我不理解的尋址部分。

鑑於

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

然後end是字符指針,並

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

您必須使用&(地址)運算符,因爲end是指針,所以它必須分配給東西的地址(這裏是字符串最後一個字符的地址)。

當我這樣做是沒有解決的部分它仍然運行

我不認爲它會 - 你應該已經得到了一個編譯錯誤

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

我確實有一個後續問題請問。以下內容不需要指向地址:start = str; – Jeff

+0

@Jeff - 那是因爲'str'是一個字符串(不是單個字符) – artm

+0

謝謝。我現在明白了。 – Jeff

0

你應該konw類型endchar*,但str[len-1]的類型是char,所以您需要更改類型str[n-1]char*,因此您需要&str[len-1]

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

使用的std :: reverse方法從STL

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

您將不得不包含「算法」庫#include。

+0

您的帖子沒有解決OP的問題。 –

+1

@RSahu OP實際上並沒有提出問題。一個合理的猜測是,問題是「什麼是在C++中反轉字符串的明智方式」。 –

+0

@DavidSchwartz,他們有點:*我不理解尋址部分* –

0

也許這可以幫助

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; 

} 

我希望這給你的想法。