c - 从 C 中的字符串中删除指定的字符

标签 c string char

我正在编写一个程序,它将在字符串数组中进行搜索,并且对于每个字符串,它将搜索指定的字符。如果找到该字符,请将其删除。在此示例中,我想删除字符“r”。

代码如下:

void convertStrings(char **line) {
    for (int str = 0; str < MAX_LINE_LENGTH; ++str) {
        for (int ch = 0; ch < MAX_STR_LENGTH; ++ch) {
            if (line[str][ch] == 'r') {
                removeChar(line[str], 'r');
            }
        }
    }
}

void removeChar(char *str, char c) {
    int i = 0;
    int j = 0;

    while (str[i]) {
        if (str[i] != c) {
            str[j++] = str[i];
        }
        i++;
    }
    str[j]=0;
}

我不确定删除字符的算法是否正确,但主要错误在别处。更具体地说,我在行中遇到了段错误:

if (line[str][ch] == 'r') {

为什么我会遇到段错误?另外,removeChar 的算法是否正确?

这是我的主要功能:

int main() {
    char line[3][10] = {"pep", "rol", "rak"};
    printf("%s\n", line[1]);
    convertStrings(line);
    printf("%s\n", line[1]);
    return 0;
}

提前致谢。

最佳答案

此代码适用于我的编译器:

#include<stdio.h>
#include<conio.h>
#define MAX_LINE_LENGTH 1024
#define MAX_STR_LENGTH 4
void removeChar(char *str, char c) {
int i = 0;
int j = 0;

while (str[i]) {
    if (str[i] != c) {
        str[j++] = str[i];
      }
    i++;
}
str[j]=0;
}

void convertStrings(char line[][MAX_STR_LENGTH]) {    //change 1
 for (int str = 0; str < MAX_LINE_LENGTH; ++str) {
    for (int ch = 0; ch < MAX_STR_LENGTH; ++ch) {
        if (line[str][ch] == 'r') {
removeChar(line[str], 'r');
        }
    }
  }
}


int main() {
 char line[3][MAX_STR_LENGTH] = {"pep", "rol", "rak"};   //change 2
 printf("%s\n", line[1]);
 convertStrings(line);
 printf("%s\n", line[1]);
 getch();
 return 0;
}

关于c - 从 C 中的字符串中删除指定的字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30599520/

相关文章:

c - 找到下一个除以 8 的数字?

c - 在 AVX2 vector 中加载 16 位整数?

python - 如何按字母顺序对字符串进行排序,小写字母排在大写字母之前?

c++ - 初始化无符号字符的正确方法*

c++ - cout 可以更改 char 数组的内容吗?

c++ - 从源代码中读取 pkgversion

c - 为什么在循环外部和内部声明具有相同名称的变量不会产生错误?

C字符串递归函数从中间找出相等性

php - 将日期转换为字符串

java - 用逗号分隔数组列表中的字符 java