[英]Substring of char[] in c++
我有
char t[200];
cin.get(s, 200);
int i = 5;
int j = 10;
除了將每個元素單獨復制到另一個數組之外substriing(i,j)
是否有任何簡單的方法可以從t
獲取substriing(i,j)
? 沒有strings
等,只是char t[200]
。
如果允許修改t
,則可以將t[j]
設置為0
,然后使用t + i
獲取子字符串。
如果沒有,您將不得不復制。
也就是說,你為什么不能只使用std::string
並省去頭疼的麻煩呢?
char* substr(char* arr, int begin, int len)
{
char* res = new char[len + 1];
for (int i = 0; i < len; i++)
res[i] = *(arr + begin + i);
res[len] = 0;
return res;
}
如果您只需要讀取數據,那么 t+i 就是您想要的,唉,您必須管理子字符串的長度...
char *sub = t+i;
int len = j-i;
printf("%.*s\n",len,sub);
如果您需要子字符串的不同副本,則必須進行復制。
這應該可以正常工作:
#include <string.h>
#include <stdlib.h>
#include <iostream>
using namespace std;
int main()
{
char t[200];
cin.get(t, 200);
int i = 5;
int j = 10;
char *to = (char*) malloc(j-i+1);
strncpy(to, t+i, j-i);
to[j-i]='\0';
cout << to;
}
您可以像這樣使用new
而不是malloc
:
char* to = new char[j-i+1];
這不會進行任何邊界檢查以確保目標數組足夠大
char newt[200];
// copy j-i chars from position t+i to newt array
strncpy(newt, t + i, j-i);
// now null terminate
newt[j-i] = 0;
使用兩個指針來表示字符串內的一個范圍。
char const * beg = t+i;
char const * end = t+j+1;
std::cout.write(beg, end-beg);
或者你可以使用一個封裝了這個想法的類。 標准庫中提出了類似的建議。 同時,您可以自己編寫,也可以使用庫中的一個。 例如, llvm::StringRef
。
llvm::StringRef sref(t+i, j+1-i);
std:cout << sref;
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.