在C一個可以聲明字符數組,創建一個指針陣列中的特定位置,並解除引用它得到在指定位置處的後綴:獲得C++中的字符串的所有後綴
char str[6] = "SLEEP";
char* pointer = &(str[1]);
printf("%s\n", pointer);
上面的代碼將打印
LEEP
其是「睡眠」的在位置1現在後綴有辦法做在C++類似的東西,而無需使用SUBSTR方法,因爲它產生一個完全新的字符串和I」米試圖避免這一點。
在C一個可以聲明字符數組,創建一個指針陣列中的特定位置,並解除引用它得到在指定位置處的後綴:獲得C++中的字符串的所有後綴
char str[6] = "SLEEP";
char* pointer = &(str[1]);
printf("%s\n", pointer);
上面的代碼將打印
LEEP
其是「睡眠」的在位置1現在後綴有辦法做在C++類似的東西,而無需使用SUBSTR方法,因爲它產生一個完全新的字符串和I」米試圖避免這一點。
你可以做的正是你已經做了什麼。
char str[6] = "SLEEP";
char* pointer = &(str[1]);
printf("%s\n", pointer);
如果使用一個std::string
來代替原始char
緩衝器(如你應該是),然後在C++ 11 std::string
保證具有連續的存儲(21.4.1/5)與附加的NUL終止符(21.4.7.1/1):
std::string str = "SLEEP";
const char* pointer = &str[1];
這些保證是新的C++ 11 - C++ 03沒有這樣的保證。但是我知道的所有實現實際上都使用帶有附加NUL終結符的連續存儲。他們這樣做是因爲需要c_str()
才能將const
指針返回給C風格的字符串。如果你想要一個在C++ 03中保證兼容的解決方案,那麼即使在C++ 03中,std::vector
也可以提供相同的連續性保證,但當然你必須自己應用NUL終結器:
std::string load = "SLEEP";
vector <char> str;
copy (load.begin(), load.end(), back_inserter (str));
load.push_back ('\0'); // Appended NUL terminator
const char* pointer = &str [1];
但是現在我們正在談論製作副本,顯然。
我會'計數'「SLEEP」+ 1;',我正確嗎? –
號等等,什麼? –
我添加了一個字符串地址,參見''SLEEP'[1]'''''''''L''或者''SLEEP'[1]'=='*(「SLEEP」+ 1) ''睡'「[1]'我做了','睡'+ 1'。 –
如果需要,您可以使用數組方法。 我給的例子是C++。
例如MyStr [0]是指向第一個元素的指針。
#include <string>
#include <iostream>
int main()
{
std::string MyStr="abc";
std::cout<<&MyStr[1];
}
輸出:BC
希望幫助:-)
#include <string>
#include <iostream>
int main()
{
std::string s("SLEEP");
std::cout << &s[1] << std::endl;
}
這是保證工作在C++ 11。在C++ 03中,不存在這樣的保證,因爲實現允許使用拷貝寫入(COW)。但是我不記得在沒有工作的情況下使用這個實現。如果使用C++ 03並需要保證,你將可以使用std::string::c_str()
:
std::cout << &s.c_str()[1] << std::endl;
您可以使用字符串引用類。字符串引用類提供類似字符串的功能,但實際上並不擁有底層存儲。
下面是使用升壓string_ref
類(在Boost.Utility找到)
#include <iostream>
#include <string>
#include <boost/utility/string_ref.hpp>
int main(int argc, const char * argv[])
{
using namespace std;
string str = "SLEEP";
cout << "str: " << str << endl;
boost::string_ref sr1(str);
cout << "sr1: " << sr1 << endl;
boost::string_ref sr2 = sr1.substr(1);
cout << "sr2: " << sr2 << endl;
return 0;
}
注意一個例子:有隻在一個字符串「睡眠」的實際情況。 sr1
和sr2
是對str
的字符串引用。
那麼,C還是C++?選一個。 – 2013-07-17 20:05:22
使用迭代器對。 – chris
std :: string str(「SLEEP」); char * pointer =&(str.c_str()[1]); printf(「%s \ n」,指針); – madnut