目录
编辑
题目描述
输入格式
输出格式
样例输入
样例输出
解题思路
题目描述
所给字符串正序和反序连接,形成新串并输出
输入格式
任意字符串(长度<=50)
输出格式
字符串正序和反序连接所成的新字符串
样例输入
123abc
样例输出
123abccba321
解题思路
输入字符串,把它的逆序字符串存放在原字符串后面,然后输出;
注意事项:
放在原字符串后面时,要从第lenth-1的位置开始放,直到原字符串第一个字符放入为止;
即:
for( i=strlen(a),j=strlen(a)-1; j>=0; i++,j--)
{
a[i]=a[j];
}
最后要加上' \0';
有一种的思路是,循环不是以原字符串第一个字符结束,而是以原字符串长度的两倍-1结束,
即:(下面这样是不对的,因为a[ strlen(a) ]原来是' \0', 被放字符后,求出长度不对,并且a的长度在改变)
for( i=strlen(a),j=strlen(a)-1; i<2*strlen(a); i++,j--)
{
a[i]=a[j];
}
代码示例:
#include <stdio.h>
#include <string.h>
int main()
{
char a[101];
int i, j = 1;
gets(a);
for(i = strlen( a ), j = strlen( a ) - 1; j >= 0; i++, j--)
{
a[i] = a[j];
}
a[i] = '\0';
puts(a);
return(0);
}
对于上述代码,我们可以再dev C++中正常运行,但是如果我们将该代码放到Visual Studio中进行编辑,会发现
gets(a);
报错,这是因为在C语言中,gets(a)
用于从标准输入(键盘)获取一行字符串,并将其保存到字符数组a
中。它是一个不安全的函数,因为它无法防止输入的字符串超过目标字符数组的大小,可能导致缓冲区溢出。由于gets()
存在安全性问题,它已被标记为不推荐使用,并在C11标准中被移除。
使用
gets(a)
时,需要注意以下几点:
- 字符数组
a
必须足够大以容纳输入的字符串,包括字符串的结尾空字符\0
。- 如果输入的字符串长度超过了字符数组的大小,会发生缓冲区溢出,导致未定义的行为。
gets()
函数不提供任何限制或验证输入的能力,因此要确保输入的字符串长度不会超过目标字符数组的大小。
在现代C编程中,推荐使用更安全的函数fgets()
替代gets()
,因为fgets()
可以指定最大读取的字符数,避免缓冲区溢出问题。
fgets()
函数用于从输入流中读取一行字符串,并将其保存到指定的字符数组中。它提供了更安全的方式来读取字符串,因为你可以指定最大读取的字符数,避免缓冲区溢出问题。
fgets()
函数的原型如下
char* fgets(char* str, int num, FILE* stream);
参数说明:
str
:指向目标字符数组的指针,用于保存读取的字符串。num
:要读取的最大字符数(包括结尾的换行符和空字符)。stream
:要读取的输入流,通常使用stdin
表示标准输入。
fgets()
函数的返回值是一个指向目标字符数组的指针,如果读取成功,则返回str
;如果发生错误或到达文件末尾,则返回NULL
。
#include <stdio.h>
#include <string.h>
int main()
{
char a[101];
int i, j = 1;
fgets(a, sizeof(a), stdin);
for (i = strlen(a), j = strlen(a) - 1; j >= 0; i++, j--)
{
a[i] = a[j];
}
a[i] = '\0';
puts(a);
return(0);
}
不过在使用fgets()
我们又会发现,最终结果成这样
那是因为fgets()
函数将包括换行符\n
在内的输入一并读取到字符数组中,因此如果你想去掉换行符,可以使用字符串处理函数strcspn()
或手动处理字符串。
最终代码:
#include <stdio.h>
#include <string.h>
int main()
{
char a[101];
int i, j = 1;
fgets(a, sizeof(a), stdin);
// 去掉换行符
a[strcspn(a, "\n")] = '\0';
for (i = strlen(a), j = strlen(a) - 1; j >= 0; i++, j--)
{
a[i] = a[j];
}
a[i] = '\0';
puts(a);
return(0);
}
Visual Studio编辑器中C4996 ‘scanf‘: This function or variable may be unsafe.问题解决方案-CSDN博客
C语言练习(检查一个数是否为质数 、剪绳子)-CSDN博客