簡體   English   中英

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;
}

該程序刪除每個單詞的最后一個字符。

#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;
}

你必須記住

  1. 修剪尾隨換行符的字符串
  2. 正確使用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在這方面表現不佳,還有其他缺點,例如其隱藏狀態會阻止嵌套使用。

由於將delm保留為空格,它將為字符串中的空格分隔的單詞創建單獨的標記,而c樣式字符串的最后一個字符為'\\ 0',即空字符,因此它將刪除該字符,而不是文本中的最后一個字符。

查看此http://www.cprogramming.com/tutorial/c/lesson9.html

事實證明,C風格的字符串總是以空字符結尾,字面是'\\ 0'字符(值為0),

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM