簡體   English   中英

C ++ c_str()不返回完整的字符串

[英]C++ c_str() doesn't return complete string

我正在執行C ++分配,需要用戶輸入表達式(例如:2 *(6-1)+ 2)並輸出結果。 除非在用戶輸入中遇到空格,否則一切都會正常工作。

要求將用戶輸入傳遞給以下方法;

double Calculate(char* expr);

我知道問題是由c_str()引起的,其中空格字符充當終止的空字節,盡管我不確定如何克服此問題。

理想情況下,我想保留空格字符,但我只想刪除它們,因為空格在表達式中毫無用處。 當使用string :: data而不是c_str時,我得到相同的結果。

int main(int argc, char **argv)
{
    string inputExpr;
    Calc myCalc;

    while(true) {
        cin >> inputExpr;
        if(inputExpr == "q") break;

        cout << "You wrote:" << (char*)inputExpr.c_str() << endl; // debug
        printf("Result: %.3f \n\n", myCalc.Calculate( (char*)temp.c_str() ) );
    }
    return 0;
}

c_str工作正常。 您的問題是cin >> inputExpr >>運算符只讀取直到下一個空格,因此您不會完全讀取方程式。

您要使用的是std :: getline

std::getline (std::cin,inputExpression);

它將讀取直到到達換行符。 如果需要特定的定界符,請參見功能說明。

問題不在於inputExpr.c_str()和c_str這樣,c_str()返回指向包含以空終止的序列的字符數組的指針。 在閱讀cin時,您會得到空格或制表符等分隔為多個字符串的信息。 檢查與字符串內容相符的方法以解決預期的操作

首先,我認為您的Calculate()方法應將const char*字符串作為輸入,因為expr應該是輸入 (只讀)參數:

double Calculate(const char* expr);

請注意,如果使用const char* ,則可以簡單地調用std::string::c_str()而無需進行任何難看的強制轉換即可刪除const-ness。

而且,由於這是C ++而不是C,因此使用std::string會很好:

double Calculate(const std::string& expr);

在還讀取空白的特定問題上,這不是終止NUL字節的問題:空間不是 NUL
您應該使用std::getline()而不是簡單的std::cin >>重載來更改讀取字符串的方式:

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

int main()
{
    string line;
    getline(cin, line);
    cout << "'" << line << "'" << endl;
}

如果編譯並運行此代碼,然后輸入類似於Hello World ,則將獲得整個字符串作為輸出(包括將兩個單詞分隔開的空格)。

暫無
暫無

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

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