我需要分割一個字符串並需要存儲兩個獨立的變量。該字符串包含一個選項卡空間。因此需要從標籤空間在C編程中分割字符串
EG分隔:字符串看起來像這樣
Sony <TAB> A Hindi channel.
我需要存儲Sony
在一個變量說char a[6];
和A Hindi Channel
在另一個變量說char b[20];
如何可以做到這一點?
我需要分割一個字符串並需要存儲兩個獨立的變量。該字符串包含一個選項卡空間。因此需要從標籤空間在C編程中分割字符串
EG分隔:字符串看起來像這樣
Sony <TAB> A Hindi channel.
我需要存儲Sony
在一個變量說char a[6];
和A Hindi Channel
在另一個變量說char b[20];
如何可以做到這一點?
也許strtok功能,你正在尋找
我的C是舊的,但這樣的事情應該工作:
#include <stdio.h>
int getTabPosition (char str [])
{
int i = 0;
//While we didn t get out of the string
while (i < strlen(str))
{
//Check if we get TAB
if (str[i] == '\t')
//return it s position
return i;
i = i + 1;
}
//If we get out of the string, return the error
return -1;
}
int main() {
int n = 0;
//Source
char str [50] = "";
//First string of the output
char out1 [50] = "";
//Second string of the output
char out2 [50] = "";
scanf(str, "%s");
n = getTabPosition(str);
if (n == -1)
return -1;
//Copy the first part of the string
strncpy(str, out1, n);
//Copy from the end of out1 in str to the end of str
//str[n + 1] to skip the tab
memcpy(str[n+1], out2, strlen(str) - n);
fprintf(stdout, "Original: %s\nout1=%s\nout2=%s", str, out1, out2);
return 0;
}
未經檢驗的,但普林西有
在'while'循環的每次迭代中計算'strlen(str)'是不值得的,它可以簡單地爲'while(str [i]!=(char)0)' –
@BasileStarynkevitch:我沒有想到,我用你的代碼編輯過。感謝您的提醒。 – DrakaSAN
記號化字符串的很多編程語言:link
你的情況< tab>是一個特殊字符,它可以是表示爲'\ t'。
如果您正在使用C語言編程
#include<string.h>
#include<stdio.h>
#include<stdlib.h>
int main(void) {
char *a[5];
const char *s="Sony\tA Hindi channel.";
int n=0, nn;
char *ds=strdup(s);
a[n]=strtok(ds, "\t");
while(a[n] && n<4) a[++n]=strtok(NULL, "\t");
// a[n] holds each token separated with tab
free(ds);
return 0;
}
對於C++而無需使用升壓庫:
#include <string>
#include <sstream>
#include <vector>
#include <iterator>
#include <iostream>
#include <algorithm>
int main() {
std::string s = "Sony\tA Hindi channel.";
std::vector<std::string> v;
std::istringstream buf(s);
for(std::string token; getline(buf, token, '\t');)
v.push_back(token);
// elements of v vector holds each token
}
使用C++和提升:How to tokenize a string in C++
#include <iostream>
#include <string>
#include <boost/foreach.hpp>
#include <boost/tokenizer.hpp>
using namespace std;
using namespace boost;
int main(int, char**) {
string text = "Sony\tA Hindi channel.";
char_separator<char> sep("\t");
tokenizer< char_separator<char> > tokens(text, sep);
BOOST_FOREACH (const string& t, tokens) {
cout << t << "." << endl;
}
}
這是C++或C?請做出決定。 –
您是否需要保留製表符,即'foo \ tbar'應該在'foo \ t'和'bar'還是'foo'和'bar'中?如果有兩個後續的分隔符,例如'FOO \噸\ tbar'。 –
檢查strtok的手冊頁 – mousomer