2

所以我想做的是从最后一次出现的字符中剪下一个字符串。例如

input =  "Hellomrchicken"
input char = "c"
output = "cken"

问题是我无法让计数起作用,因此我无法测试逻辑。我希望使用指针来做到这一点,理论上我会测试指针内的内容是否 == 为空值。我在这里使用了一个while循环。任何帮助表示感谢!

#include <stdio.h>
#include <stdlib.h>

char *stringcutter(char *s, char ch);
int count( char *s);

void main(){
    char input[100];
    char c;
    printf("Enter a string \n");
    gets(input);
    printf("Enter a char \n");
    scanf("%c", &c);
    stringcutter( *input , c );
    getchar();
    getchar();
    getchar();
}


char *stringcutter(char *s, char ch){
    int count = 0;
    // Count the length of string

            // Count the length of string
while ( check != '\0'){
            count++;
            s++;
            printf("Processed");


    printf("TRANSITION SUCCESSFUL /n");
    printf( "Count = %d /n" , count);


    // Count backwards then print string from last occurence

/*  for (i=count ; i != 0 ; i--){
        if (str[i] == ch)
            *s = *str[i];
        printf ( "Resultant string = %s", *s )
            */
            return 0; 
    }

抱歉不知道为什么代码中途被截断

4

3 回答 3

4

如果您想从头开始定义此函数,原始帖子并没有说得很清楚,但它存在于string.h其中并且看起来像

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

int main ()
{
    char input[] = "Hellomrchicken";
    char c = 'c';
    char *p;
    p = strrchr(input, c);
    printf("Last occurence of %c found at %d \n", c, p-input+1);
    return 0;
}
于 2013-10-09T07:00:06.267 回答
1

在 C 中处理字符串时,我们通常使用所谓的 C 字符串或'\0'终止字符串。这些只是chars 的连续序列,以 char 结尾'\0',一个 0 字节。

因此,一种遍历 C 惯用字符串的方法如下

char *my_string = "Hello, world";

char *p = my_string;
while (p != '\0')
{
    /* Do some work */

    p++;
}

您可以使用这样的循环来获取指向特定字符最后一次出现的指针。

char *from_last_instance_of(char *input, char c)
{
    char *last_instance_of_c = input;
    while (input != '\0')
    {
        if (*input == c)
            last_instance_of_c = input;

        input++;
    }
    return last_instance_of_c;
}

如您所见,所有工作都已就位完成。如果要在进一步操作之前复制字符串,请使用strcpy从返回的指针给定的位置复制。

于 2013-10-09T07:07:57.327 回答
0

strrchr()功能为您执行此操作。

char *output = strrchr(string_to_search, char_to_find);
int output_index = (output == NULL ? ERROR : output - string_to_search);

如果您想手动完成(在 c99 语法中)

char *output = NULL;
for(char p = string_to_search; *p; p++)
    if(*p == char_to_find)
        output = p;
于 2013-10-09T07:03:16.017 回答