做无元音cs50的问题,并运行到一个错误与strcat

3bygqnnd  于 2023-08-03  发布在  其他
关注(0)|答案(2)|浏览(99)

运行我的程序时:

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

int main(void)
{
    string word = get_string("Give me a word: " );
    int j = strlen(word);
    int i;
    char new[j + 1];

    new[0] = '\0';
    
    for (i = 0; i < j; i++)
    {
        if (word[i] == 'e')
        {
            strcat(new, "3");
        }
        else if (word[i] == 'i')
        {
            strcat(new, "1");
        }
        else if (word[i] == 'a')
        {
            strcat(new, "6");
        }
        else if (word[i] == 'o')
        {
            strcat(new, "0");
        }
        else
        {
            char p = word[i];
            strcat(new, p);
        }
    }
    printf("%s\n", new);
}

字符串
我得到错误:

no-vowels-test.c:39:25: error: incompatible integer to pointer conversion passing 'char' to parameter of type 'const char *'; take the address with & [-Werror,-Wint-conversion]
            strcat(new, word[i]);
                        ^~~~~~~
                        &
/usr/include/string.h:149:70: note: passing argument to parameter '__src' here
extern char *strcat (char *__restrict __dest, const char *__restrict __src)


我的目标是让最后一个else语句将word[i]数组中的当前字母附加到变量new[]中,以拼写出一个新单词,其中每个元音都被一个数字替换,我对这些数字没有问题。但是最后一个else语句似乎有问题,我不知道为什么。

9rygscc1

9rygscc11#

要使用strcat,需要提供一个指向以NULL结尾的字符串的指针。

char s[ 2 ] = { word[ i ], 0 };
strcat( new, s );

字符串
但是您不需要strcat来添加单个字符。尤其是你已经知道了写字符的位置。你只需要new[ i ] = c;。只是不要忘记在完成后使用NUL终止字符串。

2eafrhcq

2eafrhcq2#

strcat的第二个参数必须是C字符串,即:char的数组以空字节终止,而不是单个char(如p)。
您可以使用strncat解决此问题:将strcat(new, p);和上一行替换为:

strncat(new, &word[i], 1);

字符串
这最多连接从word[i]开始的字符串的1 char
另一种方法是直接设置new中的字节:

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

int main(void)
{
    string word = get_string("Give me a word: " );
    int i;
    int j = strlen(word);
    char new[j + 1];

    for (i = 0; i < j; i++)
    {
        if (word[i] == 'e')
        {
            new[i] = '3';
        }
        else if (word[i] == 'i')
        {
            new[i] = '1';
        }
        else if (word[i] == 'a')
        {
            new[i] = '6';
        }
        else if (word[i] == 'o')
        {
            new[i] = '0';
        }
        else
        {
            new[i] = word[i];
        }
    }
    new[i] = '\0';
    printf("%s\n", new);
}

相关问题