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>