Strchr 删除我想要的部分
Strchr removing the part I want
所以我正在使用 strchr
从文件中获取字符串的一部分:
void manipulateComputers(char *name)
{
name[strlen(name)-2] = '[=10=]';
printf("%s\n", name);
char *ptr = strchr(name, ' ');
printf("%s\n", ptr);
}
第一个 printf
是这样写的:
zelda 1 flux 1 hydra 1 willow 1 swift 1 aeon 1 neptune 1
第二个 printf
是这样写的:
1 flux 1 hydra 1 willow 1 swift 1 aeon 1 neptune 1
如您所见,zelda
消失了,这正是我想要做的。我想删除 zelda
,但现在我想使用 zelda
。
本质上,我希望第二个 printf
只打印 zelda
而不是没有 zelda
的字符串。
我如何获得 zelda
以最终将其传递给另一个函数。谢谢
你要么将它复制到另一个字符串,要么你可以使用这个技巧:
char *ptr = strchr( name, ' ' );
if( ptr )
{
char old_val = *ptr; /* Remember the old character (in this case we know it was ' ') */
*ptr = '[=10=]'; /* Terminate the sub-string */
printf( "%s\n", name );
*ptr = old_val; /* Restore the original character */
}
你没有输zelda
;指针 name
仍然指向它。
您可以使用(以及其他技术)打印 zelda
:
int z_len = ptr - name;
printf("Zelda was here: %*.*s\n", z_len, z_len, name);
与许多替代方法相比,此技术的优势在于原始字符串仍然完好无损 — 未经修改。这意味着当字符串是 const
字符串时它也有效,例如字符串文字。
#include<stdio.h>
#include<string.h>
int main()
{
char newarray[40];
char* array="zelda 1 flux 1 hydra 1 willow 1 swift 1 aeon 1 neptune 1";
printf("Orignal is :%s \n",array);
char *ptr = strchr(array, ' ');
if(ptr != NULL)
{
printf("%s\n", ptr);
if((ptr-array) < 40){
strncpy(newarray,array,(ptr-array)*sizeof(char));
newarray[(ptr-array)] = '[=10=]';
printf("Filtered string is :%s",newarray);
}
}
return 0;
}
所以这里的想法是你有字符串的起始地址,现在你还有那部分字符串结束的地址。因此,让我们将那么多字符串复制到另一个数组中并进一步使用它。
当我运行
./a.out
Orignal is :zelda 1 flux 1 hydra 1 willow 1 swift 1 aeon 1 neptune 1
1 flux 1 hydra 1 willow 1 swift 1 aeon 1 neptune 1
Filtered string is :zelda
所以我正在使用 strchr
从文件中获取字符串的一部分:
void manipulateComputers(char *name)
{
name[strlen(name)-2] = '[=10=]';
printf("%s\n", name);
char *ptr = strchr(name, ' ');
printf("%s\n", ptr);
}
第一个 printf
是这样写的:
zelda 1 flux 1 hydra 1 willow 1 swift 1 aeon 1 neptune 1
第二个 printf
是这样写的:
1 flux 1 hydra 1 willow 1 swift 1 aeon 1 neptune 1
如您所见,zelda
消失了,这正是我想要做的。我想删除 zelda
,但现在我想使用 zelda
。
本质上,我希望第二个 printf
只打印 zelda
而不是没有 zelda
的字符串。
我如何获得 zelda
以最终将其传递给另一个函数。谢谢
你要么将它复制到另一个字符串,要么你可以使用这个技巧:
char *ptr = strchr( name, ' ' );
if( ptr )
{
char old_val = *ptr; /* Remember the old character (in this case we know it was ' ') */
*ptr = '[=10=]'; /* Terminate the sub-string */
printf( "%s\n", name );
*ptr = old_val; /* Restore the original character */
}
你没有输zelda
;指针 name
仍然指向它。
您可以使用(以及其他技术)打印 zelda
:
int z_len = ptr - name;
printf("Zelda was here: %*.*s\n", z_len, z_len, name);
与许多替代方法相比,此技术的优势在于原始字符串仍然完好无损 — 未经修改。这意味着当字符串是 const
字符串时它也有效,例如字符串文字。
#include<stdio.h>
#include<string.h>
int main()
{
char newarray[40];
char* array="zelda 1 flux 1 hydra 1 willow 1 swift 1 aeon 1 neptune 1";
printf("Orignal is :%s \n",array);
char *ptr = strchr(array, ' ');
if(ptr != NULL)
{
printf("%s\n", ptr);
if((ptr-array) < 40){
strncpy(newarray,array,(ptr-array)*sizeof(char));
newarray[(ptr-array)] = '[=10=]';
printf("Filtered string is :%s",newarray);
}
}
return 0;
}
所以这里的想法是你有字符串的起始地址,现在你还有那部分字符串结束的地址。因此,让我们将那么多字符串复制到另一个数组中并进一步使用它。 当我运行
./a.out
Orignal is :zelda 1 flux 1 hydra 1 willow 1 swift 1 aeon 1 neptune 1
1 flux 1 hydra 1 willow 1 swift 1 aeon 1 neptune 1
Filtered string is :zelda