1. 程式人生 > >C/C++中如何讀取一個帶空格的字串

C/C++中如何讀取一個帶空格的字串

一、C中(用scanf讀入一個帶空格的字串)

樣例:

#include <stdio.h>
int main(){
    char s[100];
    scanf( "%[^\n]", s ); //注意:連用時一定要加上 getchar() 吸收換行符
    printf( "%s\n", s );
//  printf("%c\n", s[2] );
    return 0;
}

定製自己的掃描集 %[abc]、%[a-z]、%[^abc]、%[^a-z]。[ ]內是匹配的字元,^表示求反集

二、C中(gets函式)

可以無限讀取,以回車結束讀取。 
gets()函式從標準輸入(鍵盤)讀入一行資料,所謂讀取一行,就是遇到換行符就返回。gets()函式並不讀取換行符’\n’,它會吧換行符替換成空字元’\0’,作為c語言字串結束的標誌。 
gets()函式經常和puts()函式配對使用,puts()函式用於顯示字串,並自動在字串後面新增一個換行標誌’\n’ 
但是不推薦使用因為gets(s),(s為一個字串)。gets沒有指明讀取的最大字元數。這裡就會出現一個潛在的問題:gets將不停的往s中儲存內容,而不管是否儲存的下!gets函式不會管s的可用空間有多少。如果輸入的字串過長,會導致緩衝區溢位(buffer overflow),即多餘的字元超出了指定的目標空間。gets()函式就會訪問未被分配的記憶體空間,如果這些記憶體未被使用,不會立即出現問題;如果這片空間已經存有資料,就會擦除掉程式中的其他資料,會導致程式中止。 
在C11標準裡,gets函式已經被正式刪除了。

三、C中(fgets函式)

gets與gets互為兄弟。 
fgets(char buf, int bufsize, FILE stream ):。注意第二個引數bufsize,這個引數就限制了讀取的字元的個數,這就可以解決gets()函式的缺陷。我們知道fgets() 函式主要用於讀取檔案,如果要讀取鍵盤,則stream引數應該為stdin。需要注意的是,如果bufsize設定為n,那麼fgets()函式最多讀取n-1個字元,之所以用“最多”這個詞是因為,如果在之前遇到了換行符”\n”,fgets函式也會返回,讀取工作將會停止,而這個”\n”也會是buf字串中最後一個有效字元(再往後就是字串結束符”\0”了 ),只有在一種情況下,buf不會以”\n”結尾:讀到檔案結束符,並且檔案的最後一個不是以”\n”結尾。還有就是,fgets()函式會讀取換行符(這一點和gets函式不同),當讀取結束後,fgets函式會為buf在末尾新增一個空字元作為字串的結束。 
當一個字元都沒有讀到時,fgets函式返回NULL。

四、C中(fgetc函式)

getc(fin),他會讀取一個開啟的檔案fin,讀取一個字元,然後返回一個int值。為什麼返回的是int而不是char呢?因為如果檔案結束,fgetc將返回一個特殊標記EOF,它並不是一個char。如果把fgetc(fin)的返回值強制轉換為char,將無法把特殊值的EOF和普通字元區分開。如果要從標準輸入讀取一個字元,可以用getchar,它等價於fget(stdin)。 
使用fgetc(fin)可以從開啟的檔案fin中讀取一個字元。一般情況下應當再檢查它不是EOF後再將其轉化成char值,從標準輸入讀取一個字元可以用getchar,他等價於fgetc(stdin)。 
fgetc和getchar將讀取“下一個字元”,因此需要知道在各種情況下,“下一個字元”是哪個。如果用“scanf()”讀取整數,則要是再輸入後多加了一個空格,用getchar讀取到的將是這個空格;如果在輸入之後緊跟著換行,則讀取到的是回車符“\n”。

五、C++中(getline函式)

string類中的getline函式簡單基本用法。

#include <iostream>
#include <string>
using namespace std;
int main()
{
     string a;
     getline(cin,a);
     cout<<a<<endl;
     return 0;
}

string類中的getline函式高階用法。

#include <iostream>
#include <string>
using namespace std;
int main()
{
    string a;
    char s='0';
    getline(cin,a,s);
    cout<<a<<endl;
    return 0;
}

此時,getline函式只會讀取自己定義的字元s之前的字元,讀取到s就停止讀取了。

在char陣列下也可以使用getline()函式簡單用。

#include <iostream>
#include <string>
using namespace std;
int main()
{
     char a[100];
     cin.getline(a,sizeof(a));
     cout<<a<<endl;
     return 0;
}

cin.get()的用法同上。

相關推薦

C/C++如何讀取一個空格字串

一、C中(用scanf讀入一個帶空格的字串) 樣例: #include <stdio.h> int main(){ char s[100]; scanf( "%[^\n]", s ); //注意:連用時一定要加上 getchar() 吸收換

c語言判斷一個字串是否包含另一個字串

1. 使用庫函式 string.h  strstr函式  函式名: strstr  功 能: 在串中查詢指定字串的第一次出現  用 法: char *strstr(char *str1, char

C語言一個*和[]優先級問題

pre 執行 return ges spa 技術 分享 malloc bsp 最近寫著玩了這麽一段代碼 1 int Init(int **T, int v1, int v2, int v3) 2 { 3 4 if (!(*T=(int*) malloc(3*

C++opencv讀取資料夾的多幅圖片並按順序重新命名後儲存到另一資料夾

#include <iostream> #include <fstream> #include <opencv2/core/core.hpp> #include <opencv2/highgui/highgui.hpp> #include &

C#(.Net)呼叫Sql sever漢字字串顯示為?問號

利用Sql語言,向資料庫中匯入‘C語’,結果在檢查的時候,發現如上圖所示。 網路上,很多人說是編碼問題,但是都沒給出具體的解決方案,最終用這種方法解決了! 把上圖中需要儲存漢字字串的型別變為 nvarchar(**) **為任意整數,同時用insert加入資料時,要在字串前加入N,

c語言的 strcpy和strncpy字串函式使用介紹

1.strcpy函式 函式原型:char *strcpy(char *dst,char const *src)            必須保證dst字元的空間足以儲存src字元,否則多餘的字元仍然被複制,覆蓋原先儲存在陣列後面的記憶體空間的數值,strcpy無法判斷這個問題因為他無法判斷字元陣列的長度。

c語言使用自的qsort(結構體排序)

c中沒有自帶的sort函式emm 不過有自帶的qsort函式 (其實用法都差不多(只是我經常以為c中有sort 標頭檔案要用  1 #include <stdlib.h>  一定要重新把指標指向的值賦值給一個node型別,不然比較不了 1 struct node{ 2 int d,i

如何讀取一個含有空格字串

1、自定義輸入結束型別:scanf("%[^\n]",st);其中\n為結束標誌; 2、c++: string st; getline(cin,st); 3、cin.get(char *st,int MAXN):char st[50];cin.get(st,50); 4、cin.ge

關於C語言輸入一個三位整數,逆序輸出一個三位數

剛開始在leetcode上刷題,遇到的兩道題目比較簡單,一道是求用一個函式求輸入的兩個數的值,這個簡單就略過了,下面講講一道常見的題目,這是一點小心得,下面附上題目及解題思路:題目:Given a 32-bit signed integer, reverse digits o

C語言】實現一個函式翻轉字串

實現一個函式翻轉字串 思路:->實現翻轉 1.翻轉即前後交換 2.對於字串前後交換直到中間一個字元終止迴圈 3.令(start++)<(end–)迴圈條件不滿足退出 #incl

C語言得到一個float值在記憶體的16進製表示

float佔據4個位元組32位,1位為符號位,8位指數位,23位尾數位。 例 將72.65f轉為為16進製表示 第一步:將浮點數轉換為二進位制顯示 將72.65f轉換為二進位制顯示形式為 100 1000. 101 0011 0011 0011... 整數部分轉換方法為

轉換C檔案的tab為空格的三種方法

將linux檔案中的tab更換為空格的三種方法 1,用sed命令 #sed ‘s/\t/ /g’ filename >filename1 2,  用tr命令 #cat filename|tr  "\t" " " >filename2 3,用col -

C語言把數字轉換為字串

在將各種型別的資料構造成字串時,sprintf 的強大功能很少會讓你失望。由於sprintf 跟printf 在用法上幾乎一樣,只是列印的目的地不同而已,前者列印到字串中,後者則直接在命令列上輸出。這也導致sprintf 比printf 有用得多。sprintf 是個變參函

C語言通過分隔符來擷取字串

最近在工作中要實現這樣一個功能: 從一個文字檔案中按行讀取資料,一行資料中每一列都可能含有空格,所以你要把空格給截取出來。列之間是通過TAB鍵分割的。 我在一開始使用了C的庫函式strtok這個函式。 先介紹一下strtok這個函式原型: char *strtok(char *src, char *flag

java如何在檔案讀取一個字串並建立以這個字元為名字的類的物件

<span style="font-family: Arial, Helvetica, sans-serif; background-color: rgb(255, 255, 255);">我們一般用properties或者XML檔案作為資源儲存的檔案,現在主

【轉載】Java 從原字串擷取一個新的字串 subString()

substring public String substring(int beginIndex) 返回一個新的字串,它是此字串的一個子字串。該子字串從指定索引處的字元開始,直到此字串末尾。 示例: "unhappy".substring(2) returns

Python輸入一個空格為間隔的陣列

很多時候要從鍵盤連續輸入一個數組,並用空格隔開,Python中的實現方法如下: >>> str_in = input('請以空格為間隔連續輸入一個數組:') 然後在鍵盤中輸入比如:123 456 789 111 222 以回車結束輸

從資料庫讀取一個圖片並儲存為一個圖片檔案

import java.sql.*; import java.io.*; public class WriteDB {  public static void main(String[] args)  {   Connection conn=null;   String dr

C語言】統計一個字串字母、數字、空格及其它字元的數量

統計一個字串中字母、數字、空格及其它字元的數量 解法1: #include <stdio.h> #include <stdlib.h> #include <string.h> #include <ctype.h> void Count(con

C/C++輸入空格字串用法總結

(1)gets(char *str)     需要包含標頭檔案#include <stdio.h> (2)scanf("%[^\n]]",str)     需要包含標頭檔案#include <stdio.h>