簡體   English   中英

從緩沖區讀取后獲取字符串的長度

[英]Getting the length of a string after reading from buffer

string str;
stringstream buffer;

buffer << is.rdbuf();

str = buffer.str();

cout << str.length();
size_t pos = str.find_first_not_of(".123456789");

有人可以向我解釋為什么此代碼不起作用嗎?

運行它時,輸入“ 12345”后它就坐在那里

到底是怎么回事?! 我對字符串流不太熟悉,但是為什么這樣以及其他看似平凡的操作無法按預期進行呢?

我猜你需要關閉流,即Ctrl + D或其他。
請記住,對於流,換行符只是另一個(兩個)字符。

因此,您可能需要使用可以處理行的其他輸入流閱讀器。 我不太了解STD lib,但我敢打賭它就在那里。

也許這就是您想要的:

string str;
getline(is,str);
cout << str.length();
size_t pos = str.find_first_not_of(".123456789");

我真的不理解不閱讀轉義序列是什么意思? 在您鍵入內容時,getline會讀取所有內容。 考慮以下示例(將C和C ++構造混合使用時有點難看):

#include <stdio.h>
#include <iostream>

int main() {
        std::string str;
        getline(std::cin,str);
        printf("string length: %ld\n",str.length());
        size_t pos = str.find_first_not_of(".123456789");
        printf("first nondigit: %ld\n",pos);
        printf("you typed: %s\n",str.c_str());
        return 0;
}

如果我運行它並輸入

12345\n\t a

我得到以下輸出:

string length: 11
first nondigit: 5
you typed: 12345\n\t a

cin等待輸入分隔符。 輸入完字符串后,按Enter鍵。

暫無
暫無

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

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