说我有这种格式的行
“单词12 YR”或“单词10 MO”
我希望将其转换为
char *分别包含“12Y”或“10M”。
格式为两个单词,后跟数字,后跟表示年份或月份的单词。单词是空格/制表符分隔。目前,我正在玩strtok功能
由于
答案 0 :(得分:1)
执行此操作的一种方法是(不使用boost
进行错误检查):
string s = "word word 10 MR";
string res;
tokenizer<> tok(s);
tokenizer<>::iterator iter = tok.begin();
while(iter != tok.end())
{
try
{
int n = lexical_cast<int>(*iter);
}
catch(bad_lexical_cast& e)
{
++iter;
continue;
}
break;
}
res = *iter;
++iter;
res = res + (*iter)[0];
非增强解决方案:
using namespace std;
string s = "word word 10 MR";
string res;
stringstream ss(s);
istream_iterator<string> iter(ss);
istream_iterator<string> end;
while(iter != end)
{
istringstream iss(*iter);
int n;
iss>>n;
if( ! iss.fail())
{
break;
}
++iter;
}
res = *iter;
++iter;
res = res + (*iter)[0];
答案 1 :(得分:1)
对于ANSI C 89,请查看:
char *str="word word 12 YR", *p=str, tmp[MAXSTR], yourstr[MAXYOURSTR]={};
...
while( 1==sscanf(p,"%s",tmp) ) {
if( *yourstr )
{
yourstr[strlen(yourstr)]=*tmp;
break;
}
else
if( 1==sscanf(tmp,"%[0-9]*") )
strcpy(yourstr,tmp);
p+=strlen(tmp)+1;
}
答案 2 :(得分:0)
以空格作为分隔符对其进行标记。连接倒数第二个标记,空格和最后一个标记的第一个字符。
答案 3 :(得分:0)
扫描字符串以查找空格。丢掉前两个字。将第三学期与第四学期的第一个字母结合起来。 strtok或只是一个forloop和一些计数将照顾这一点。
答案 4 :(得分:0)
您可以使用PCRE库并使用正则表达式执行此操作。
答案 5 :(得分:0)
user411313's answer让我想起了这个:
#include <stdio.h>
#include <string.h>
int main(void) {
char result[9];
char w[4][1000]; /* temporary */
const char *src = "word word 12 YR"; /* "word word 10 MO"; */
if (sscanf(src, "%s%s%s%s", w[0], w[1], w[2], w[3]) == 4) {
size_t len;
strcpy(result, w[2]);
result[len = strlen(result)] = *(w[3]);
result[len + 1] = 0;
}
printf("result: [%s]\n", result);
return 0;
}