2016-07-30 58 views
-3

以下是分配:編寫一個將char數組作爲輸入參數並反轉字符串的函數。該功能應該使用兩個指針,前後。前面的指針最初應該引用字符串中的第一個字符,後面的指針最初應該引用字符串中的最後一個字符。通過交換前後引用的字符來反轉字符串,然後增加前部指向下一個字符並減少後部指向前一個字符,依此類推,直到整個字符串反轉爲止。C++編程分配程序中斷信號11

然後編寫一個主函數,該函數將一個字符串作爲用戶的輸入並打印反轉的字符串(使用上述函數)。所有輸入字符串都將爲100個字符或更少。

您必須使用指針來反轉數組。

如果使用動態數組(不是必需的),則必須在程序結束之前刪除分配給任何動態數組的所有內存。

該代碼是正確的。當我手動執行時,它可以包含所有字符。只是不知道爲什麼我會提交測試,它會錯過最後一個字符。以下是錯誤消息:[http://i.stack.imgur.com/Qukiw.png]

這裏是我的代碼:

#include <iostream> 
#include <cstdlib> 
#include <cctype> 
#include <string.h> 

using namespace std; 

void reverse(char *s); 

int main() 
{ 
char str[100] = ""; 

cout << "Enter string:" << endl; 
cin.getline(str,100); 

reverse(str); 

cout << "The string reversed is:" << endl; 
cout << str << endl; 

return 0; 
} 

void reverse(char *s) 
{ 
char *front, *rear, temp; 

front = s; 
rear = s + strlen(s)-1; 
while (front < rear) 
{ 

    temp = *front; 
    *front = *rear; 
    *rear = temp; 

    front++; 
    rear--; 
} 
return; 
} 

任何幫助表示讚賞,謝謝!

+0

爲什麼不使用'std :: sting str(「」);'而不是'char str [101] =「」;'?會讓你的生活變得容易不要告訴我請_「但我的教授限制等等」_,在這種情況下跳過這門課,並試圖找到真正教你C++的人。 –

+0

@πάνταῥεῖ:這一切都很好,但它並不能解釋爲什麼網站顯示錯誤,當沒有(再)。這個課程似乎是......不可思議(說得溫和),但我想他必須忍受它。像其他類似課程的人一樣(可能是相同的)。現在我已經看到了這樣的輸出。 –

+0

FWIW,您的代碼在ideone上運行良好:https://ideone.com/i20SYm。 –

回答

-1
char str[100] = " "; 

^^初始化是可選的

或可替代...

char* str = (char*)malloc(sizeof(char) * 100); 

這會工作過,但我不推薦它,C++還提供其他類型的鑄造

char* str = new char[100]; 

只是另一種可以編寫它的方式,請確保使用刪除操作符

delete[] str // if you use the new keyword 
+0

我的問題是:當我手動執行它時,它可以包含所有字符。只是不知道爲什麼我會提交測試,它會錯過最後一個字符。 –

+0

你的代碼唯一的問題是緩衝區溢出問題,你現在編輯 – hec

+0

那麼我該如何解決這個問題? –