C程序功能,用一个单词替换另一个单词

时间:2018-08-09 13:41:09

标签: c arrays string function

我很困惑地创建一个函数,该函数将打印一个字符串并要求用户输入两个数字,然后函数将这些数目的单词彼此替换。 我已将以下图像添加为示例。 enter image description here

这是我的作业,我创建了其他3个功能,但实际上并没有得到。 有人可以帮帮我,如何将单词转换为数字,然后将这些单词的数量彼此替换。

这是我的程序,它可以将字符串分成单词,但是我该如何替换单词的位置。

   #include <stdio.h>
#include <string.h>
int main()
{
    char str1[100];
    char newString[10][10]; 
    int i,j,ctr;
       printf("\n\n Split string by space into words :\n");
       printf("---------------------------------------\n");    

    printf(" Input  a string : ");
    fgets(str1, sizeof str1, stdin);    

    j=0; ctr=0;
    for(i=0;i<=(strlen(str1));i++)
    {
        // if space or NULL found, assign NULL into newString[ctr]
        if(str1[i]==' '||str1[i]=='\0')
        {
            newString[ctr][j]='\0';
            ctr++;  //for next word
            j=0;    //for next word, init index to 0
        }
        else
        {
            newString[ctr][j]=str1[i];
            j++;
        }
    }
    printf("\n Strings or words after split by space are :\n");
    for(i=0;i < ctr;i++)
        printf(" %s\n",newString[i]);
    return 0;
}

2 个答案:

答案 0 :(得分:0)

在我看来,到目前为止,您的表现不错(您的代码无法处理逗号,但您可以稍后再添加)。因此,假设您的newString实际上包含各个单词。

因此,下一步是根据newString中的各个单词构造一个新的字符串str2。在执行此操作时,您可以简单地交换两个感兴趣的词。要构建新字符串,请使用strcat函数。

下面的代码并不完全正确,但可能会为您提供一些进行作业的想法:

int lowest_index_to_swap = some_number
int highest_index_to_swap = some_higher_number

char str2[100] = "";

for (i=0; i<number_of_words_found; ++i)
{
     if (i == lowest_index_to_swap)
         strcat(str2, newString[highest_index_to_swap];
     else if (i == highest_index_to_swap)
         strcat(str2, newString[lowest_index_to_swap];
     else
         strcat(str2, newString[i];
     strcat(str2, " ";
}

答案 1 :(得分:-1)

这是我根据您在图像中输入的内容在本地服务器中尝试过的代码片段。

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#define SIZE 100
#define WORDLEN 20

int main() {
    int place_1, place_2, count = 0, i, k =0;
    char str[] = "Hi, welcome to C programming";
    char **words = (char **)malloc(sizeof(char *)*SIZE);
    if(!words){
        printf("malloc of words failed!\n");
        exit(1);
    }
    char *temp = (char *)malloc(sizeof(char)*WORDLEN);
    if(!temp){
        printf("malloc of temp failed!\n");
        exit(1);
    }
    for(i = 0; str[i] != '\0'; count++){
        words[count] = (char *)malloc(sizeof(char)*WORDLEN);
        if(!words[count]){
            printf("malloc of words[%d] failed!\n", count);
            exit(1);
        }
        sscanf(str+i, "%s", words[count]);
        i += 1+strlen(words[count]);
        printf("%d %s %d\n", count, words[count], i);
    }
    printf("Enter the word places to replace: ");
    if(scanf("%d %d", &place_1, &place_2) < 2){
        printf("scanf failed!\n");
        exit(1);
    }
    temp = words[place_1 - 1];
    words[place_1 - 1] = words[place_2 - 1];
    words[place_2 - 1] = temp;
    for(i = 0; i < count; i++){
        sprintf(str+k, "%s ", words[i]);
        k += 1+strlen(words[i]);
    }
    printf("str: %s\n", str);
    free(temp);
    for(i = 0; i < count; i++){
        free(words[i]);
    }
    free(words);
}

希望有帮助。