C++判斷使用者輸入路徑是否正確(判斷碟符是否存在以及“\”與"/")
直接上程式碼,用了windows.h裡的函式獲取碟符
#include <iostream> #include <Windows.h> #include <string.h> #include <string> #include <tchar.h> using namespace std; string userPath; //使用者輸入路徑 string TcharToChar(TCHAR * tchar); //TCHAR轉char函式,並存放在string中 string getDriveStrings(); //獲取系統碟符字串,返回string,形式為C:\\E:\\F:\\... bool checkDrive(string drives, string userPath); //檢查使用者輸入路徑碟符是否存在或合法,返回true或false bool checkUserPath(string userPath); //檢查使用者輸入路徑"\\"時候正確,不正確則給出提示,返回true或false int main() { bool isDriveExist; bool isUserPathRight; string drives = getDriveStrings(); for (;;){ userPath = ""; cout << "請輸入檔案路徑:" << endl; cin >> userPath; isDriveExist = checkDrive(drives, userPath); if (!isDriveExist){ continue; } else{ isUserPathRight = checkUserPath(userPath); if (!isUserPathRight){ continue; } else{ cout << "路徑合法!" << endl; break; } } } } string getDriveStrings() { TCHAR szBuf[100]; memset(szBuf, 0, 100); DWORD len = GetLogicalDriveStrings(sizeof(szBuf) / sizeof(TCHAR), szBuf); string s = TcharToChar(szBuf); return s; } string TcharToChar(TCHAR * tchar) { string sz; for (TCHAR * s = tchar; *s; s += _tcslen(s) + 1) { char * _char = new char[100]; int iLength; //獲取位元組長度 iLength = WideCharToMultiByte(CP_ACP, 0, s, -1, NULL, 0, NULL, NULL); //將tchar值賦給_char WideCharToMultiByte(CP_ACP, 0, s, -1, _char, iLength, NULL, NULL); string t(_char); sz.append(t); free(_char); } return sz; } bool checkDrive(string drives, string userPath) { int position; char driveTag = userPath.at(0); if (driveTag > 'a' && driveTag < 'z'){ driveTag -= 32; } if ((driveTag > 'A' && driveTag<'Z') || (driveTag>'a' && driveTag < 'z')) { position = drives.find(driveTag); if (position == drives.npos) { cout << "輸入的碟符不存在,請重新輸入!" << endl; return false; } else{ return true; } } else { cout << "輸入碟符非法,請重新輸入!" << endl; return false; } } bool checkUserPath(string userPath) { bool isRight = true; string::iterator it; for (it = userPath.begin(); it != userPath.end(); ++it) { if (*it == '/') { isRight = false; cout << "\'/\'錯誤,應該為\'\\',請重新輸入!" << endl; break; } } return isRight; }
相關推薦
C++判斷使用者輸入路徑是否正確(判斷碟符是否存在以及“\”與"/")
直接上程式碼,用了windows.h裡的函式獲取碟符 #include <iostream> #include <Windows.h> #include <string.h> #include <string> #includ
C# Word轉為多種格式文件(Word轉XPS/SVG/EMF/EPUB/TIFF)
C# Word轉XPS/SVG/EMF/EP .NET Word API 免費類庫 控件 一款有著強大的文檔轉換功能的工具,無論何時何地都會是現代辦公環境極為需要的。在本篇文章中,將介紹關於Word文檔的轉換功能(Word轉XPS/SVG/EMF/EPUB/TIFF)。希望方法中的代碼能為
C#泛型效能進階之(排序遍歷後輸出元素值)
而foreach語句是通過迭代變數來列舉集合的元素,為集合的每個元素執行嵌入語句。也就是說,foreach語句是通過迭代變數在集合內對其自身的引用來實現遍歷的,ArrayList類列表同樣是通過物件值引用來實現的。 而這也是稱之為強型別的原因,因為在編譯時沒有辦法告訴我們列表中資料的實際型別
Sql Server中儲存過程中輸入和輸出引數(簡單例項,一看就懂)
-- ===================【建立儲存過程】===================== USE [Message] GO /****** Object: StoredProcedure [dbo].[讀取外部資料庫查詢] Script Date:
C#幾種擷取字串的方法(split 、Substring、Replace、remove)
C#截圖字串常用的方法有 split 、Substring、Replace、remove等。 split的使用: 1. Split( Char ()) 返回的字串陣列包含此例項中的子字串(
C++之訪問控制(public、private、protected以及friend)
public 所有均可訪問private 類自己的成員函式訪問,不能被類物件訪問protected 類自己以及子類訪問,不能被類物件訪問friend 友元,別人是你的朋友,他可以訪問我的東西。(但不是我可以訪問他的東西)友元關係不能被繼承。友元關係是單向的,不具有交換性。若
js判斷時間是否為今天日期(判斷日期與當前日期相差多少天)
下面是我的程式碼: // 判斷時間為今天 judgeTime(data){ var date = data.toString(); var year = date.substring(
IOS TextField 輸入銀行卡號格式化(每四位中間空一格)
最近做的專案有關於銀行卡號輸入的情景設定,參照微信綁卡操作,輸入卡號數字每隔4位空1位。 由於趕進度,沒細作研究,特此網上摘錄的程式碼片段,如下: -(BOOL)textField:(UITextField *)textField shouldChangeCharact
c/c++程式設計題 之 猴子選大王(陣列、連結串列兩種方法)
一群猴子要選新猴王。新猴王的選擇方法是:讓N只候選猴子圍成一圈,從某位置起順序編號為1-N號。從第1號開始報數,每輪從1報到3,凡報到3的猴子即退出圈子,接著又從緊鄰的下一隻猴子開始同樣的報數。如此不斷迴圈,最後剩下的一隻猴子就選為猴王。請問是原來第幾號猴子當選猴王?
[C++]LeetCode 11: Container With Most Water(最大容積/最大矩形面積)
Problem: Given n non-negative integers a1, a2, ..., an, where each represents a point at coordinate (i, ai). n vertical lines are drawn
C語言:幾個不常用(或者說可能出錯的如const)的type qualifier
幾個不常用(除const和volatile外)的type qualifiers,const和volatile應該算是最熟悉的了,但是其他的幾個就不大容易在程式碼中發現,寫下來順便學習下描述:這幾個type qualifiers的使用範圍是有限制的,const和volatile
初學C語言:輸入10個整數,將其中最小的數與第一個數對換,把最大的數與最後一個數對換。
#include<stdio.h> void input(int a[10]) { int i; for (i=0;i<10;i++) { scanf("%d",&
【C/C++】c/c++基礎加進階視頻教程(含數據結構和設計模式)
process 1.5 正在 子集 多態 c++編程 基本 開發 數據 收集整理了c和c++從基礎到進階的視頻教程,共26.4G,歡迎下載。至於學習c++要不要先學c的問題也是見仁見智,個人覺得在c語言的基礎上學c++會更有效率一些。這套視頻教程包含了c語言課程,麻油們可以
as 插件GsonFormat用法(json字符串快速生成javabean)
idt for form wid mage 插件 json blank http GsonFormat 主要用於使用Gson庫將JSONObject格式的String 解析成實體,該插件可以加快開發進度,使用非常方便,效率高。 插件地址:https://plugins.je
Python的Django框架完成一個完整的論壇(1.settings.py源碼以及解釋)
zone sage path bsp ges request nat templates types 完成後效果:http://www.cnblogs.com/xuyiqing/p/8274912.html settings.py源碼 """ Django settin
Redis系列--內存淘汰機制(含單機版內存優化建議)
del dbn amp 一段 最簡 nal imp 同學 博客 https://blog.csdn.net/Jack__Frost/article/details/72478400?locationNum=13&fps=1 每臺redis的服務器的內存都是有限的,而
shell指令碼抽取文字檔案中指定字串的方法:sed+grep方法、awk+grep方法(必要時可以聯合sed以及grep)、grep+cut方法
在linux中經常要對一些動態的文字檔案抽取指定的字串,比如執行ps命令後想要獲取指定的執行程序(如ps自己)的PID號(同一個程序每次啟動的時候pid號是隨機分配的)。該怎麼辦呢?當然,可以用一些擷取字串的方法,這裡介紹一下用2種方法來解決這類問題。 一、sed+grep方法: 首先大概瞭
面試前的準備(java專業 ~學習演算法排序以及查詢)
java專業的馬上大三,東西學的差不多,但是資料結構這塊特別薄弱,所以面試前對自己資料結構進行鞏固複習(PS:其實是預習啦~) 針對自己薄弱的幾塊進行記錄:(排序和查詢) 每天都在叫囂自己會什麼技術,什麼框架,可否意識到你每天都在被這些新名詞、新技術所迷惑,.NET、
tensorflow學習(2.網路模型的儲存以及提取)
第一篇學習了CNN網路的構建以及程式碼的基礎結構,第二篇則是實際專案過程中需要的網路模型的儲存 先放上儲存的程式碼: #tf可以認為是全域性變數,從該變數為類,從中取input_data變數 import tensorflow.examples.tutorials.mni
Unity實戰篇:移植遊戲到安卓平臺的注意事項及其例項(四)(物件池概念的引入以及優化)
1.物件池基礎概念的瞭解(必看) 2.針對專案來進行嵌入 using System.Collections; using System.Collections.Generic; using UnityEngine; using Unit