2013-05-18 69 views
3

這是一個簡單的示例程序:如何在C++函數中返回字符串?

#include <iostream> 
#include <string> 

using namespace std; 

string replaceSubstring(string, string, string); 

int main() 
{ 
    string str1, str2, str3; 

    cout << "These are the strings: " << endl; 
    cout << "str1: \"the dog jumped over the fence\"" << endl; 
    cout << "str2: \"the\"" << endl; 
    cout << "str3: \"that\"" << endl << endl; 
    cout << "This program will search str1 for str2 and replace it with str3\n\n"; 

    cout << "The new str1: " << replaceSubstring(str1, str2, str3); 

    cout << endl << endl; 
} 

string replaceSubstring(string s1, string s2, string s3) 
{ 
    int index = s1.find(s2, 0); 

    s1.replace(index, s2.length(), s3); 

    return s1; 
} 

它編譯但該函數返回什麼。如果我將return s1更改爲return "asdf",它將返回asdf。我怎樣才能返回一個字符串與此功能?

+8

你實際上並沒有初始化你的字符串變量。 – Cairnarvon

+0

爲什麼你認爲返回字符串有問題?檢查函數內部字符串的值。 – juanchopanza

+0

你輸出的文本只是編譯器的文本 - 它不會試圖弄清楚那些文本的含義,也不會保留你的承諾。畢竟,也許你*意味着*撒謊給用戶。 – Steve314

回答

10

你永遠不會在main中爲你的字符串賦予任何值,所以它們是空的,因此顯然這個函數返回一個空字符串。

替換:

string str1, str2, str3; 

有:

string str1 = "the dog jumped over the fence"; 
string str2 = "the"; 
string str3 = "that"; 

此外,你必須在你的replaceSubstring功能幾個問題:

int index = s1.find(s2, 0); 
s1.replace(index, s2.length(), s3); 
  • std::string::find返回一個std::string::size_type(又名: size_t)不是int。兩個區別:size_t是未簽名的,它不一定與int的大小相同,具體取決於您的平臺(例如,64位Linux或Windows size_t爲無符號64位,而int爲32位有符號)。
  • 如果s2不是s1的一部分,會發生什麼情況?我會留給你找到如何解決這個問題。提示:std::string::npos
+0

是的。晚了。骨頭移動。謝謝。 – fredsbend

+0

@fredsbend:我剛剛在代碼中添加了另一個問題(與您的問題無關)。看我的編輯。 – syam

+0

因爲'index'大於's1.length()',所以我有了一個while循環來解決第二點問題。其效果是它現在用's3'替換's2'的所有實例。儘管我遇到過,但我不熟悉'size_t'。 – fredsbend

2

給你的字符串指定一些東西。這一定會有所幫助。

3
string str1, str2, str3; 

cout << "These are the strings: " << endl; 
cout << "str1: \"the dog jumped over the fence\"" << endl; 
cout << "str2: \"the\"" << endl; 
cout << "str3: \"that\"" << endl << endl; 

由此,我看到你沒有初始化STR1,STR2,或STR3包含您要打印的值。我可能會建議先做:

string str1 = "the dog jumped over the fence", 
     str2 = "the", 
     str3 = "that"; 

cout << "These are the strings: " << endl; 
cout << "str1: \"" << str1 << "\"" << endl; 
cout << "str2: \"" << str2 << "\"" << endl; 
cout << "str3: \"" << str3 << "\"" << endl << endl;