C 删除字符串中的最后一个字符
C Delete last character in string
我想删除字符串中的最后一个字符
首先,我使用 strtok 函数
我的输入是:"Hello World Yaho"
我使用 " "
作为分隔符
我的期望是这样
Hell
Worl
Yah
但实际输出是这样的
Hello
Worl
Yaho
我该如何解决这个问题?我无法理解这个输出
这是我的代码
int main(int argc, char*argv[])
{
char *string;
char *ptr;
string = (char*)malloc(100);
puts("Input a String");
fgets(string,100,stdin);
printf("Before calling a function: %s]n", string);
ptr = strtok(string," ");
printf("%s\n", ptr);
while(ptr=strtok(NULL, " "))
{
ptr[strlen(ptr)-1]=0;
printf("%s\n", ptr);
}
return 0;
}
由于您将 delm 保留为 space,它将为字符串中的 space 分隔词创建单独的标记,并且 C 风格的字符串将它们的最后一个字符包含为 '\0',即空字符,所以它会删除该字符而不是文本中的最后一个字符。
看看这个
http://www.cprogramming.com/tutorial/c/lesson9.html
it turns out that C-style strings are always terminated with a null character, literally a '[=10=]' character (with the value of 0),
这个程序删除每个单词的最后一个字符。
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
int main(int argc, char*argv[]){
char *string;
char *ptr;
string = (char*)malloc(100);
puts("Input a String");
fgets(string,100,stdin);
printf("Before calling a function: %s\n", string);
string[strlen(string)-1]=0;
ptr = strtok(string," ");
printf("%s\n", ptr);
while(ptr){
ptr[strlen(ptr)-1]=0;
printf("%s\n", ptr);
ptr = strtok(0, " ");
}
return 0;
}
你一定要记得
- Trim 尾随换行符的字符串
- 正确使用strtok
测试
Input a String
Hello World Yaho
Before calling a function: Hello World Yaho
Hello
Hell
Worl
Yah
最好将问题分为两个阶段来解决:一方面将短语解析为单词,如果需要,可以使用 strtok
,然后在单独的函数中省略最后一个字符打印单词:
#include <stdio.h>
#include <string.h>
static void print_truncated_word(const char *ptr) {
int len = strlen(ptr);
if (len > 0) len -= 1;
printf("%.*s", len, ptr);
}
int main(int argc, char*argv[]) {
char buf[128];
char *ptr;
puts("Input a string: ");
if (fgets(buf, sizeof buf, stdin) == NULL) {
/* premature end of file */
exit(1);
}
printf("Before calling a function: %s\n", string);
ptr = strtok(string, " \n");
while (ptr) {
print_truncated_word(ptr);
ptr = strtok(NULL, " \n");
}
return 0;
}
请注意,print_truncated_word
函数不会修改缓冲区。应避免对输入参数产生副作用,除非它们是函数的明确目标。 strtok
在这方面表现不佳,还有其他缺点,例如它的隐藏状态会阻止嵌套使用。
我想删除字符串中的最后一个字符
首先,我使用 strtok 函数
我的输入是:"Hello World Yaho"
我使用 " "
作为分隔符
我的期望是这样
Hell
Worl
Yah
但实际输出是这样的
Hello
Worl
Yaho
我该如何解决这个问题?我无法理解这个输出
这是我的代码
int main(int argc, char*argv[])
{
char *string;
char *ptr;
string = (char*)malloc(100);
puts("Input a String");
fgets(string,100,stdin);
printf("Before calling a function: %s]n", string);
ptr = strtok(string," ");
printf("%s\n", ptr);
while(ptr=strtok(NULL, " "))
{
ptr[strlen(ptr)-1]=0;
printf("%s\n", ptr);
}
return 0;
}
由于您将 delm 保留为 space,它将为字符串中的 space 分隔词创建单独的标记,并且 C 风格的字符串将它们的最后一个字符包含为 '\0',即空字符,所以它会删除该字符而不是文本中的最后一个字符。
看看这个 http://www.cprogramming.com/tutorial/c/lesson9.html
it turns out that C-style strings are always terminated with a null character, literally a '[=10=]' character (with the value of 0),
这个程序删除每个单词的最后一个字符。
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
int main(int argc, char*argv[]){
char *string;
char *ptr;
string = (char*)malloc(100);
puts("Input a String");
fgets(string,100,stdin);
printf("Before calling a function: %s\n", string);
string[strlen(string)-1]=0;
ptr = strtok(string," ");
printf("%s\n", ptr);
while(ptr){
ptr[strlen(ptr)-1]=0;
printf("%s\n", ptr);
ptr = strtok(0, " ");
}
return 0;
}
你一定要记得
- Trim 尾随换行符的字符串
- 正确使用strtok
测试
Input a String
Hello World Yaho
Before calling a function: Hello World Yaho
Hello
Hell
Worl
Yah
最好将问题分为两个阶段来解决:一方面将短语解析为单词,如果需要,可以使用 strtok
,然后在单独的函数中省略最后一个字符打印单词:
#include <stdio.h>
#include <string.h>
static void print_truncated_word(const char *ptr) {
int len = strlen(ptr);
if (len > 0) len -= 1;
printf("%.*s", len, ptr);
}
int main(int argc, char*argv[]) {
char buf[128];
char *ptr;
puts("Input a string: ");
if (fgets(buf, sizeof buf, stdin) == NULL) {
/* premature end of file */
exit(1);
}
printf("Before calling a function: %s\n", string);
ptr = strtok(string, " \n");
while (ptr) {
print_truncated_word(ptr);
ptr = strtok(NULL, " \n");
}
return 0;
}
请注意,print_truncated_word
函数不会修改缓冲区。应避免对输入参数产生副作用,除非它们是函数的明确目标。 strtok
在这方面表现不佳,还有其他缺点,例如它的隐藏状态会阻止嵌套使用。