首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将修改后的strtok令牌转换回原始字符串的“语法”

将修改后的strtok令牌转换回原始字符串的“语法”
EN

Stack Overflow用户
提问于 2015-11-16 04:01:18
回答 1查看 835关注 0票数 0

在将字符串拆分成令牌之后,是否有一种方法可以将这些标记转换回原始字符串(带有标点符号,并且区分大小写)?

我相当肯定strcat会被调用,但是有什么好的方法来维护原始字符串的标点符号&区分大小写呢?

假设我需要单独修改每个令牌,然后再将它们连接回原始字符串的结构中。

编辑:我希望标题已经被改写和澄清了。

代码语言:javascript
复制
char* msg = malloc(10000);
char* msg2 = malloc(10000);
char* buffer;
char buffer2[10000];

printf("input: \n");
fgets(msg, 9999, stdin);

msg2 = strdup(msg);
buffer = strtok(msg2, " ;,.!?\n");
Node* ptr; // assume this is initialized to a linked list containing 2 strings per node (str, str2)
while (buffer) {

        for (int i = 0; i < strlen(buffer); i++) { //strcmp is case-sensitive
            if (isalpha(buffer[i])) {
                buffer[i] = tolower(buffer[i]);
            }
        }
        while (ptr) {
            if ((ptr != NULL) && (strcmp(ptr->str, ptr->str2) != 0)) {
                buffer = ptr->str2; // modifies the token 
                break;
            }
    }
    ptr = ptr->next;
    }
    strcat(buffer2, " "); // this will concatenate the modified tokens back together with spaces
    strcat(buffer2, buffer); // but I lose the original string's structure (i.e.: punctuation, case-sensitivity)
    buffer = strtok(NULL, " ;,.!?\n");

    printf("%s", buffer2); // so how should I get the original string's structure back with the modified tokens?
EN

回答 1

Stack Overflow用户

发布于 2015-11-16 04:10:32

如果您想使用strtok()并希望稍后访问原始字符串,请保留原始字符串的副本,因为strtok()将销毁原始字符串。

代码语言:javascript
复制
// we have char *st ;

char *tem = malloc(strlen(st)+1);
strcpy(tem, st);

现在您可以稍后以原始字符串的形式访问tem。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33728312

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档