鱼C论坛

 找回密码
 立即注册
查看: 1259|回复: 3

[已解决]如何在string中的特定character前后添加空格

[复制链接]
发表于 2023-9-26 21:39:52 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
对于char* command = "cat<1.txt>2.txt",想要再"<"与">"前后添加空格使之成为"cat < 1.txt > 2.txt"
最佳答案
2023-9-26 22:11:15
#include <stdio.h>

int main(void)
{
        char command[1024]="cat<1.txt>2.txt>3.txt"                                 ;
        int i , k , m                                                              ;
        printf("%s\n" , command)                                                   ;
        for(m = 0 ; command[m] ; m ++)                                             ;
        for(k = 0 ; command[k] ;) {
                for(; command[k] && command[k] != '<' && command[k] != '>' ; k ++) ;
                if(command[k]) {
                        for(i = m ; i > k ; i --) command[i + 2] = command[i]      ;
                        command[k + 1] = command[k]                                ;
                        command[k] = command[k + 2] = ' '                          ;
                        k += 2                                                     ;
                        m += 2                                                     ;
                }
        }
        printf("%s\n" , command)                                                   ;
}
        编译、运行实况:
D:\[exercise]\C>g++ -o x2 x2.c

D:\[exercise]\C>x2
cat<1.txt>2.txt>3.txt
cat < 1.txt > 2.txt > 3.txt

D:\[exercise]\C>
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2023-9-26 21:40:03 | 显示全部楼层
可以使用字符串操作函数和循环来实现。

以下是一个示例代码:
#include <iostream>
#include <cstring>

int main() {
    char* command = "cat<1.txt>2.txt";
    char new_command[100] = ""; // 新字符串
    int len = strlen(command);
    for (int i = 0; i < len; i++) {
        if (command[ i] == '<' || command[ i] == '>') {
            strcat(new_command, " "); // 在特定字符前添加空格
            strncat(new_command, &command[ i], 1); // 添加特定字符
            strcat(new_command, " "); // 在特定字符后添加空格
        } else {
            strncat(new_command, &command[ i], 1); // 添加其他字符
        }
    }
    std::cout << new_command << std::endl;
    return 0;
}

解释:

1. 首先定义了原始字符串  command  和一个新字符串  new_command ,长度为 100。
2. 使用  strlen  函数获取原始字符串的长度。
3. 使用  for  循环遍历原始字符串中的每个字符。
4. 如果当前字符是  <  或  > ,则在新字符串中添加空格、特定字符和空格,以达到在特定字符前后添加空格的效果。
5. 如果当前字符不是  <  或  > ,则直接将其添加到新字符串中。
6. 最后,输出新字符串。

输出结果为: cat < 1.txt > 2.txt
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-9-26 21:40:25 | 显示全部楼层
问题分析:

对于给定的字符数组 char* command = "cat<1.txt>2.txt",我们需要在字符 <> 前后添加空格。

解决方案:

一种简单的方法是创建一个新的字符数组来存储结果,然后遍历原始字符串,并在满足条件的位置上插入空格。

下面是代码示例:
++#include <iostream>#include <cstring>int main() {    const char* command = "cat<1.txt>2.txt";    int len = strlen(command);    char newCommand[2 * len];  // 创建一个新的字符数组来存储结果    int j = 0;    for (int i = 0; i < len; i++) {        if (command[i] == '<' || command[i] == '>') {            newCommand[j++] = ' ';  // 在特定字符前添加空格            newCommand[j++] = command[i];  // 复制特定字符            newCommand[j++] = ' ';  // 在特定字符后添加空格        } else {            newCommand[j++] = command[i];  // 复制其他字符        }    }    newCommand[j] = '\0';  // 添加字符串结尾标志    std::cout << newCommand << std::endl;    return 0;}
运行以上代码,将会输出结果:"cat < 1.txt > 2.txt"。

希望以上解答对你有帮助!如果还有其他问题,请随时提问。

球一个最佳答案谢谢啦!这对我非常重要!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-9-26 22:11:15 | 显示全部楼层    本楼为最佳答案   
#include <stdio.h>

int main(void)
{
        char command[1024]="cat<1.txt>2.txt>3.txt"                                 ;
        int i , k , m                                                              ;
        printf("%s\n" , command)                                                   ;
        for(m = 0 ; command[m] ; m ++)                                             ;
        for(k = 0 ; command[k] ;) {
                for(; command[k] && command[k] != '<' && command[k] != '>' ; k ++) ;
                if(command[k]) {
                        for(i = m ; i > k ; i --) command[i + 2] = command[i]      ;
                        command[k + 1] = command[k]                                ;
                        command[k] = command[k + 2] = ' '                          ;
                        k += 2                                                     ;
                        m += 2                                                     ;
                }
        }
        printf("%s\n" , command)                                                   ;
}
        编译、运行实况:
D:\[exercise]\C>g++ -o x2 x2.c

D:\[exercise]\C>x2
cat<1.txt>2.txt>3.txt
cat < 1.txt > 2.txt > 3.txt

D:\[exercise]\C>
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-12-24 00:01

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表