gpt4 book ai didi

c - 返回字符串长度小于输入字符串长度

转载 作者:行者123 更新时间:2023-11-30 20:57:52 25 4
gpt4 key购买 nike

我正在尝试将不同的值设置为来自 agrv 的字符串。
例如执行cmd行:

./programm_name abc

因此 argv 长度为 3,但 s 长度为 1。我真的不明白为什么:(

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

string shift(string s);

int main (int argc, string argv[])
{
if (argc != 2)
{
printf("Usage: ./programm_name keyword\n");
return 1;
}
for(int i = 0; i < strlen(argv[1]); i++)
{
if(isdigit(argv[1][i]))
{
printf("Usage: ./programm_name keyword\n");
return 1;
}
break;
}
string keyword = shift(argv[1]); // here argv[1] length is 3
return 0;
}

string shift(string s)
{
for(int i = 0, int n = strlen(s); i < n; i++)
{
if(s[i] >= 65 && s[i] <= 90)
{
s[i] = s[i] - 65;
}
else if(s[i] >= 97 && s[i] <= 122)
{
s[i] = s[i] - 97;
}
printf("%i\n", s[i]);

}
return s; // here s length is 1
}

最佳答案

做的时候

   else if(s[i] >= 97 && s[i] <= 122)
{
s[i] = s[i] - 97;
}

如果 s 为“abc”,则将“a”替换为 0(然后将“b”替换为 1,将“c”替换为 2),因此第一个字符变为 0,字符串的长度变为对于任何空字符指示字符串结尾的函数,为 0。

你为什么要这样做s[i] = s[i] - 97;或等效的 ?你的目标是什么?

return s; // here s length is 1

否,输入“abc”或“ABC”时为0

<小时/>

不要使用 (ascii) 代码作为文字整数,使用 'a' 等

string shift(string s)
{
for(int i = 0, int n = strlen(s); i < n; i++)
{
if(s[i] >= 'A' && s[i] <= 'Z')
{
s[i] = s[i] - 'A';
}
else if(s[i] >= 'a' && s[i] <= 'z')
{
s[i] = s[i] - 'a';
}
printf("%i\n", s[i]);

}
return s;
}

要知道一个角色是否是 alpha,我还建议您使用 isalpha

注意而不是去做for(int i = 0, int n = strlen(s); i < n; i++)你可以这样做for(int i = 0; s[i] != 0; i++)最好输入 isize_t而不是 int 因为这是索引的类型(它是 strlen 等返回的类型)

<小时/>

关于c - 返回字符串长度小于输入字符串长度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56090743/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com