【问题标题】:Substring replacement in a string in C [closed]C中字符串中的子字符串替换[关闭]
【发布时间】:2019-12-30 13:18:55
【问题描述】:

大家!我决定在这个网站上创建一个帐户寻求帮助,因为我找不到任何可以帮助我的东西。我有一个需要多个步骤的问题: 1)从键盘读取字符串; 2) 读取一个整数,表示要修改的子字符串的个数(修改就是将字符串的所有字符转换为“*”); 3)读取所有需要修改的子串; 4) 打印修改后的初始字符串。 我试图通过首先设法使用一个子字符串来完成它,但是当我读取多个子字符串时我不知道该怎么做。所以,这里是版本 版本 1

#include<stdlib.h>
#include<string.h>
int main()
{   
    int n;
    char str[5120];
    char substr[100];
    printf("Type the string:\n");
    gets(str);
    printf("\nType the substring which you would like to modify:");
    gets(substr);
    char *p;
    p = strstr(str,substr);
        if (*p != '\0')
            {
                for( int j=0 ; j< strlen(substr); j++)
                        {
                            *p = '*';
                            p++;
                        }
                }
    printf("\nThe modified string is:\n");
    for ( int i=0 ; i< strlen(a) ; i++)
            {
                printf("%c",a[i]);
            }
    return 0;
}

以及我尝试修改多个的版本

#include<stdlib.h>
#include<string.h>
int main()
{   
    int n;
    char str[5129];
    char substr[n][100];
    printf("Type the string:\n");
    gets(str);
    printf("How many substrings to modify?");
    scanf("%d",&n);
    printf("\nType the substrings:");
    for( int i=0 ; i< n ; i++)
        {
            scanf("%s",substr[i]);
            printf(" ");
        }
    for ( int i=0; i < n; i++)
        {
            char *p;
            p = strstr(str,substr[i]);
            if (*p != '\0')
                {
                    for( int j=0 ; j< strlen(cuv[i]); j++)
                        {
                            *p = '*';
                            p++;
                        }
                }
        }
    printf("\nThe modified string is:\n");
    for ( int i=0 ; i< strlen(str) ; i++)
            {
                printf("%c",str[i]);
            }
    return 0;
}```
I guess for the n times that I cycle to the string I have to allocate memory somewhere, or I don't know..
Please, I need some help! Thank you!

【问题讨论】:

  • 你只需获取第一个子字符串,修改字符串,然后获取下一个并修改(修改的)字符串,然后是下一个和下一个......
  • 感谢您的快速回答,Paul Ogilvie!但是问题要求所有的子字符串都需要先是红色的,然后才需要修改它们。这是考试的模型。
  • 然后你将子字符串读入一个数组或列表中并一个一个地处理它们(想出这个有多难?)
  • 问题指定子字符串需要从键盘一次输入一个,它们之间有“”空格,Paul Ogilvie!我不明白你的建议,对不起。
  • 我说子字符串需要一次输入一个事实并不意味着它们必须在输入后直接处理。你现在的任务怎么样?还有问题吗?

标签: c string substring


【解决方案1】:

所以我根据您和@PaulOgilvie 的建议编辑了我的答案。我希望该程序现在可以按您的预期运行。

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

#define MAX_SIZE 5129

void replaceSubstring(char *p, int len){
    for(int i = 0; i < len; i++, p++){
        *p = '*';
        }
    }

int main() {   
    int n = 0;
    char str[MAX_SIZE];
    char substr[n][100];

    printf("Type the string:\n");
    fgets(str, MAX_SIZE, stdin);

    printf("How many substrings to modify?");
    scanf("%d",&n);


    for( int i=0 ; i< n ; i++) {
        printf("\nType the substring number %d:", i+1);
            scanf("%s",substr[i]);
    }

    char *p;
    for ( int i=0; i < n; i++){
         p = strstr(str, substr[i]);
         while(p != NULL) {
             replaceSubstring(p, strlen(substr[i]));
             p = strstr(str, substr[i]);
             }
    }

    printf("\nThe modified string is:\n");
    for ( int i=0 ; i< strlen(str) ; i++)
            {
                printf("%c",str[i]);
            }
    return 0;
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-09-16
    • 1970-01-01
    • 2014-03-06
    • 2016-02-25
    • 2012-04-03
    • 2013-07-23
    相关资源
    最近更新 更多