将字符串中的字符更改为两个字符

时间:2018-02-06 11:03:15

标签: c string visual-studio

您好strchr()有问题,因为它会返回指向该字符首次出现的指针,但是如何从中获取索引以便能够更改它?如何将一个字符更改为两个字符? 所以我需要将src中的每个'x'更改为dest中的'ks'。

我的代码:

#include <stdio.h>
#include <string.h>

void antikorso(char *dest, const char *src) {
    strcpy(dest, src);
    if (strchr(dest, 'x')) {

    }
    printf("\n%s", dest);
}

int main(void) {

    const char *lol = "yxi yxi";
    char asd[1000];
    antikorso(asd, lol);
}

5 个答案:

答案 0 :(得分:1)

以下代码行可能会有所帮助:

  #include <stdio.h>
    #include <string.h>

    void antikorso(char *dest, const char *src) {
        int j=0;
        for(int i=0;i<strlen(src);i++)
        {
          if (src[i] == 'x')) {
           dst[j]='k';
           j++;
           dst[j] = 's';
           j++;
           }
           else
           {
             dst[j] = stc[i];
             j++;
           }
           i++;
        }
        dst[j] = '\0';
        printf("\n%s", dest);
        return dest;
    }

    int main(void) {

        const char *lol = "yxi yxi";
        char asd[1000];
        antikorso(asd, lol);
    }

答案 1 :(得分:1)

您可能不需要索引,只需一个指针。 “索引”将是从开头的偏移量,因此dest[i]dest + i相同,后者是dest的地址,加上i个字符。所以你可以使用:

    char *cp;
    if (cp=strchr(dest, 'x')) {
       *cp= 'y';

但如果你想要索引,那就是

   if (cp=strchr(dest, 'x')) {
       int i = cp - dest;

答案 2 :(得分:1)

你可以这样做:

void antikorso(char *dest, const char *src) {
    const char *p = src;
    int i;

    for (i = 0; *p != '\0'; i++, p++) {
        if (*p != 'x') {
           dest[i] = *p;
        } else {
           dest[i++] = 'k';
           dest[i] = 's';
        }
    }
    dest[i] = '\0'; 
    printf("\n%s", dest);
}

答案 3 :(得分:1)

其他答案并非不正确,只是想解决一个重要问题:通过写入目标缓冲区的末尾来解决未定义的行为是不安全的(与strcpy或{{} {}}等许多stdlib函数相同的问题{1}}如今被​​认为是不安全的)!所以我强烈建议你修改你的功能签名(如果你有自由的话):

strcat

返回值不会向安全性添加任何内容,但会阻止您在输出后调用size_t antikorso(char* dest, size_t length, const char* src) // ^^ ^^ { char* d = dest; char* end = d + length; for(; *src; ++src, ++d) { // not much different than the other answers, just the range checks... if(d == end) break; *d = *src; if(*d == 'x') { *d = 'k' if(++d == end) break; *d = 's'; } } // now null-terminate your string; // first need to get correct position, though, // in case the end of buffer has been reached: d -= d == end; // this might possibly truncate a trailing "ks"; // if not desired, you need extra checks... *d = 0; return d - dest; } 一次...

答案 4 :(得分:1)

如果strchr返回有效地址,则可以使用指针算法来获取索引,方法是减去&#34;基地址&#34; - 即指向数组第一个元素的指针。

#include <string.h>
#include <stddef.h> // NULL, ptrdiff_t

const char* result = strchr(dest, 'x');

if ( result != NULL) 
{
  ptrdiff_t index = result - dest;
  ... // do stuff with index
}

ptrdiff_t是一个标准的C整数类型,适合表示指针运算的结果。