如何删除C字符串中的单词

时间:2013-09-15 14:33:48

标签: c char

我目前有一个存储文件名的char数组。

eg. folder1/subfolder/subsubfolder/file1.txt

我希望能够删除此char数组中的第一个文件夹名称。所以它变成了

subfolder/subsubfolder/file1.txt

我知道basename()将输出file1.txt,但我需要文件夹结构,而不是第一个。

最好的方法是什么?使用/作为描述字符?

  • 编辑* 好吧显然我不能问一个char数组而不详细说明我的整个怪异程序大声笑。

我想知道是否有一种从一开始就缩短char数组的简单方法。我正在制作一个文件复制程序,如果我可以通过丢弃第一个文件夹名称缩短整个文件位置,这将使我的生活更轻松。在编程方面,我是一个完整的菜鸟,并认为这对于本网站上的向导来说可能很容易解决。我没有把代码放在我的初始帖子中,因为我不知道它是否是一个能够满足我要求的功能。所以道歉。但如果你必须有代码,那么......

        strcpy(sourcePath, Path); 
    strcat(sourcePath, slash);

这显然不能满足我的需要。

3 个答案:

答案 0 :(得分:2)

您可以使用strpbrk

const char * strpbrk ( const char * str1, const char * str2 );

http://en.cppreference.com/w/c/string/byte/strpbrk

它返回指向str1中任何字符的str1中第一个匹配项的指针,如果没有匹配则返回空指针。

在您的情况下str2= "/"

// You can use it in the following way
const char* f = strpbrk(pathname, str2);
int sz = strlen(pathname) - strlen(f); // +/- 1.
new_path_name = strncpy(new_path_name, f, sz);

答案 1 :(得分:1)

您可以使用this来帮助您进行子串:

char subbuff[5]
memcpy( subbuff, &buff[10], 4 );
subbuff[4] = '\0';

this可帮助您找到索引:

  

size_t strcspn(const char * str1,const char * str2);

和一个例子:

/* strcspn example */
#include <stdio.h>
#include <string.h>

int main ()
{
  char str[] = "fcba73";
  char keys[] = "1234567890";
  int i;
  i = strcspn (str,keys);
  printf ("The first number in str is at position %d.\n",i+1);
  return 0;
}

答案 2 :(得分:0)

您可以使用此部分从数组中删除特定单词

for (i = 0; i < slength; i++)
{
    if (str[i] == word[j])
        j++;
    else
        j = 0;

    if (j == wlength)
        for (t = 0; t <= wlength; t++)
        {
            for (k = 0; k < slength; k++)
                str[i - j + k] = str[i - j + k + 1];
        }
}