簡體   English   中英

C++中char[]的子串

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM