2

仅使用 C

我想解析一个字符串并且:

  1. 计算字符串中某个字符的出现次数(例如,计算'e'传入字符串中的所有 s)
  2. 一旦计数(或者甚至在我计数时)用 3 替换 e
4

5 回答 5

9

好吧,你要么是懒惰,要么是卡住了,假设卡住了。

您需要一个带有签名的函数,例如

int ReplaceCharInString(char* string, char charToFind, char charThatReplaces)
{

}

在你需要的功能里面

  1. 声明一个整数来计算出现次数
  2. 从字符串的开头移动到结尾的循环
  3. 在循环内部,要检查的 if 语句是当前字符 charToFind,
  4. 增加出现次数并执行替换的语句
  5. 在循环之后,您需要返回出现次数
于 2009-05-29T08:34:48.190 回答
3

此函数将接受一个字符串,将每个 'e' 替换为 '3',并返回它执行替换的次数。它安全、干净、快速。

int e_to_three(char *s)
{
    char *p;
    int count = 0;
    for (p = s; *p; ++p) {
        if (*p == 'e') {
            *p = '3';
            count++;
        }
    }
    return count;
}
于 2009-05-29T08:37:26.267 回答
2

一般来说,最好使用标准库函数而不是自己滚动。而且,碰巧的是,有一个标准库函数可以在字符串中搜索一个字符并返回一个指向它的指针。(它处理一个字符串,所以请查看具有前缀“str”的函数)(库函数几乎肯定会被优化为使用专门的 CPU 操作码来执行任务,而手写代码则不会)

  1. 将临时指针(比如“ptr”)设置到字符串的开头。

    • 在一个循环中,使用ptr作为参数调用上面的函数,并将其设置为返回值。

    • 增加一个计数器。

    • 当找不到'e'时,将指针处的字符设置为“3”中断。

于 2009-05-29T09:50:20.097 回答
2

这是一个帮助您入门的外壳。在这里询问您是否需要任何帮助。

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

int main(){
    const char* string = "hello world";
    char buffer[256];
    int e_count = 0;
    char* walker;

    // Copy the string into a workable buffer
    strcpy(buffer,string);

    // Do the operations
    for(walker=buffer;*walker;++walker){
        // Use *walker to read and write the current character
    }

    // Print it out
    printf("String was %s\nNew string is %s\nThere were %d e's\n",string,buffer,e_count);
}
于 2009-05-29T08:35:29.483 回答
2

你们中的一些人是从中间开始的。

一个更好的开始将是

char *string = "hello world";
Assert(ReplaceCharInString(string, 'e', '3') == 1);
Assert(strcmp(string, "h3llo world") == 0);
于 2009-05-29T10:35:48.853 回答