[应用方案] 删除字符串多余的字符

[复制链接]
2765|25
 楼主| eefas 发表于 2024-1-21 21:11 | 显示全部楼层 |阅读模式
算法题目:手动输入一个字符串,删除过滤掉不是英文字母的字符,并输出过滤后的字符串。


编程思路

编程思路:


1、用函数fgets实现,从键盘输入一个字符串;


2、逐一判断字符串中,每个字符是否是“A到Z”和“a到z”字符,如果是保留,不是删除。


3、输出过滤后的字符串。


程序范例


#include<stdio.h>


int main()

{

    char niu[60];

    int i, j;



    printf("请输入一个字符串: ");

    fgets(niu, (sizeof niu/sizeof niu[0]), stdin);



    for(i=0;niu!='\0';++i)

    {

    while (!( (niu >= 'a' && niu <= 'z') || (niu >= 'A' && niu <= 'Z') || niu == '\0') )

        {

            for(j = i; niu[j] != '\0'; ++j)

            {

                niu[j] =niu[j+1];

            }

            niu[j] = '\0';

        }


    }


    printf("输出结果: ");


    puts(niu);

    return 0;

}
tpgf 发表于 2024-2-2 11:44 | 显示全部楼层
这个跟需要删除的字符的种类不同 算法也会不同
zljiu 发表于 2024-2-2 12:15 | 显示全部楼层
感觉这个程序里边最关键的是如何正确识别特殊字符
nawu 发表于 2024-2-2 12:48 | 显示全部楼层
当前思路仅仅针对于普通的英文字母
gwsan 发表于 2024-2-2 13:35 | 显示全部楼层
如何应对输入的字符是非法字符呢
aoyi 发表于 2024-2-2 17:58 | 显示全部楼层
这里输入端是使用的什么形式的接口呢
tfqi 发表于 2024-2-2 18:31 | 显示全部楼层
这个程序只能提供一种思路 并不是一个完整的实用的程序
tfqi 发表于 2024-2-2 18:31 | 显示全部楼层
应该判定的完善一点 比如 如果输入的是两个以上字符怎么办呢
biechedan 发表于 2024-3-4 17:08 | 显示全部楼层
#include <stdio.h>  
#include <string.h>  
  
// 函数原型声明  
void removeDuplicateChars(char *str);  
  
int main() {  
    char myString[] = "aabbbcccddeee";  
    printf("Original string: %s\n", myString);  
  
    removeDuplicateChars(myString);  
    printf("Processed string: %s\n", myString);  
  
    return 0;  
}  
  
// 删除字符串中多余的字符(即连续的重复字符)  
void removeDuplicateChars(char *str) {  
    if (str == NULL) {  
        return;  
    }  
  
    int length = strlen(str);  
    if (length <= 1) {  
        return;  
    }  
  
    char *writePtr = str; // 指向当前写入位置的指针  
    char *readPtr = str;  // 指向当前读取位置的指针  
  
    while (*readPtr) {  
        // 如果当前字符与前一个字符不同,则写入  
        if (*readPtr != *(readPtr - 1)) {  
            *writePtr++ = *readPtr;  
        }  
        readPtr++; // 无论如何都向前移动读取指针  
    }  
  
    // 在字符串末尾添加空字符以标记字符串结束  
    *writePtr = '\0';  
}
fengm 发表于 2024-3-5 16:26 | 显示全部楼层
删除字符串的前导空白符和后随空白符,以及非空白字符之间的连续多个空白符,只保留一个。
abotomson 发表于 2024-3-7 21:07 | 显示全部楼层
可以使用指针直接操作字符串,删除多余的字符。例如,可以遍历字符串,找到需要删除的字符,并将其后面的字符向前移动。
sdCAD 发表于 2024-3-7 23:35 | 显示全部楼层
手动遍历字符串,查找并替换所有不需要的字符(如空格、制表符等)为空字符('\0')。
lzbf 发表于 2024-3-9 16:32 | 显示全部楼层
首先计算字符串str1的长度,然后使用strncpy()函数将str1中的字符复制到str2中,最后在str2的末尾添加字符串结束符'\0'。
sesefadou 发表于 2024-3-11 13:58 | 显示全部楼层
某些单片机开发环境提供了特定的库函数来处理字符串,这些函数可能更高效或者更适合特定硬件平台。
sheflynn 发表于 2024-3-11 21:51 | 显示全部楼层
在单片机编程中,有时需要删除字符串中多余的字符。这可以通过编写一个循环来实现,遍历字符串,直到遇到终止符(通常是'\0')为止。
sesefadou 发表于 2024-3-12 14:01 | 显示全部楼层
#include <string.h>

void removeExtraChars(char *str) {
    int len = strlen(str);
    int i;

    for (i = 0; i < len; i++) {
        if (str[i] == '\0') {
            break;
        }
    }

    for (int j = i; j < len; j++) {
        str[j] = '\0';
    }
}
loutin 发表于 2024-3-12 16:22 | 显示全部楼层
使用 strcpy 函数将目标字符串复制到一个新的字符串缓冲区,然后使用 strlen 函数计算原始字符串和新字符串缓冲区中字符的数量。最后,将新字符串缓冲区中多余的空格字符删除,直到达到所需长度。
maqianqu 发表于 2024-3-16 11:12 | 显示全部楼层
可以通过循环遍历字符串的方式,逐个复制字符,直到遇到字符串结束符'\0'。
zerorobert 发表于 2024-3-17 09:41 | 显示全部楼层
通过逐一判断字符串中的每个字符是否为“A到Z”或“a到z”,如果是则保留,否则删除。
iyoum 发表于 2024-3-17 21:06 | 显示全部楼层
许多单片机的库函数中提供了字符串处理函数,如C标准库中的strncpy()、strcat()、strcpy()等。可以利用这些函数实现删除字符串多余字符的操作。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

98

主题

3152

帖子

2

粉丝
快速回复 在线客服 返回列表 返回顶部