我只想回圈瀏覽某些Ascii字符,而不是所有字符都直接挨著。例如,我只想從字符'1到7'回圈,然后從字符'? 到F'。我不想在'8到>'之間進行回圈。我有這樣的for回圈,但這將包括我不想要的字符。
for (char i = '1'/span>; i < 'H'/span>; i )
我應該如何修改它,以便只回圈瀏覽我想要的東西?
uj5u.com熱心網友回復:
從1到7的回圈是直接的,因為阿拉伯數字('0'到'9')被所有C和C 標準要求為連續和增加的值。
for (char c = '1'/span>; c <= '7'/span>; c)
或者(一種更常見的風格)
for (char c = '1'/span>; c < '8'/span>; c)
試圖回圈瀏覽你的第二組ASCII字符('?'到'F')的問題是,除了ASCII之外還有其他的字符集--其中的字符順序是不同的。 例如,在ASCII中,'?'比'@'少一個,但這對其他字符集來說是不保證的。 相反,用你想回圈的字符創建一個字串,并在該字串上迭代。 例如;
const std::string characterset = "?@ABCDEF"/span>;
for (char c : characterset) // option 1, C 11 and later
{
//對c做一些處理。
}
for (auto c : characterset) // option 2, C 11 and later (type deduction)
{
//對c做一些處理。
}
//選項3(所有C 標準)
for (std::string::const_iterator it = characterset.begin(), end = characterset.end() 。
it != end; it)
{
char c = *it;
//對*it或c做一些處理(它是一個參考一個字符的迭代器)。
}
將回圈處理你的第二組字符。
如果你想在一個單一的回圈中完成所有的作業,那么改變字符集。 例如,上述方案1的修改版可能是;
const std::string characterset = "1234567?@ABCDEF"/span>;
這是一個更通用的方法,不依賴于你的實作(主機系統、編譯器、庫)支持ASCII字符集(或兼容)。
uj5u.com熱心網友回復:
創建一個包含你想回圈使用的字符集,并在這個字符集上回圈。 例如:
#include <iostream>
#include <stdexcept>
#include <string>
#include <set>
// character_set.h
//-------------------------------------------------------------------------
// 為了能夠輕松地輸入一個字符范圍,我們需要一個輔助結構。
結構 character_range_t
{
//有了這個析構器,一個字符范圍就可以在支架初始化中使用。
character_range_t(const char f, const char t) :
from(f)。
to(t)
{
if (to < from) throw std::invalid_argument("to must be larger or equal to from"/span>) 。
}
char from;
char to;
};
//-------------------------------------------------------------------------
//helper function to combine multiple character range into on set
//輸入是一個編譯時的范圍陣列。
template<std::size_t N>
auto make_character_set(const character_range_t(& ranges)[N])
{
//I chose a set because all elements must be unique and set does that.
std::set<char> set。
//回圈所有的輸入范圍。
for (std::size_t n = 0; n < N; n)
{
//對于每個范圍,將該范圍內的字符添加到集合中。
for (char c = ranges[n].from; c <= ranges[n].to; c) set.insert(c)。
}
return set。
}
// main.cpp
//-------------------------------------------------------------------------
// #include "character_set.h"
int main()
{
auto set = make_character_set({{'1','7'},{' ? ','F'}})。)
//使用基于范圍的for回圈來回圈處理集合中的所有字符。
for(const char c : set)
{
std::cout << c << " "/span>;
}
uj5u.com熱心網友回復:
每個字符都有一個固定的ASCII值與之相關。你可以用那個特定的ASCII值來指代任何字符。你可以用一個 "如果 "條件跳過你不想要的字符。你會發現所有的ASCII值這里。參照你的例子,如果你想跳過從'?'到'F'的字符,代碼可能會是這樣的:
使用 命名空間 std.com.cn>。
int main()
{
for (char i = '1'/span>; i < 'H'; i )
{
if(i>=63 && i<=70)
//63是"? "的ASCII值。
//70是'F'的ASCII值。
{
//跳過我們不需要的ASCII值。
繼續。
}
cout << i << ""/span>。
}
return 0;
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/328904.html
標籤:
上一篇:排除白色空間的Regex模式
