我正在尝试学习 C 的基础知识,但我无法弄清楚为什么这段代码不起作用。reverse() 中的 while 循环导致总线错误。我在编程面试书中发现几乎相同的代码作为有效的解决方案,但是我在这里看到的这个或其他类似的方法都对我有用,没有总线错误。
#include <stdio.h>
void reverse(char* str) {
char* end = str;
char tmp = 0;
if(str) {
while(*end) {
end++;
}
--end;
while(end>str) {
tmp = *end;
*end-- = *str;
*str++ = tmp;
}
}
}
int main() {
char* a = "12";
puts(a);
reverse(a);
puts(a);
return 0;
}
Run Code Online (Sandbox Code Playgroud) 函数reverseAr()接受两个参数,一个char(ar [])数组和数组(n)的大小,然后反转数组的内容(不使用另一个数组).然后,该函数将通过参数ar将结果返回给调用函数.
我的代码似乎无法运行,我想我错误地传递了函数之间的值,但我无法弄清楚在哪里.
这是代码:
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <string.h>
#include <math.h>
void reverseAr(char ar[], int n);
int main()
{
char str[128];
int len;
printf("\nEnter an array of characters: ");
gets(str);
len = strlen(str);
printf("The reversed array of characters is = %s\n", reverseAr(str, len));
return 0;
}
void reverseAr(char ar[], int n)
{
char temp = ar[0];
ar[0] = ar[n - 1];
ar[n - 1] = temp;
if (n > 1)
{
reverseAr(++ar, n - 2);
}
}
Run Code Online (Sandbox Code Playgroud)
预期产量:
Enter …Run Code Online (Sandbox Code Playgroud) 我想颠倒C++元组的内容.我正在尝试在这个答案中建议的以下代码:
template<typename T, size_t... I>
auto
reverse_impl(T&& t, redi::index_sequence<I...>)
-> std::tuple<typename std::tuple_element<sizeof...(I) - 1 - I, T>::type...>
{
return std::make_tuple(std::get<sizeof...(I) - 1 - I>(std::forward<T>(t));
}
template<typename T>
auto
reverse(T&& t)
-> std::tuple<typename std::tuple_element<N - 1 - I, T>::type...>
{
return reverse_impl(std::forward<T>(t),
redi::make_index_sequence<std::tuple_size<T>::value>());
}
Run Code Online (Sandbox Code Playgroud)
但我从g ++ 4.8.1得到这些错误消息:
foo.cc: In function ‘std::tuple<typename std::tuple_element<((sizeof (I ...) - 1) - I), T>::type ...> reverse_impl(T&&, redi::index_sequence<I ...>)’:
foo.cc:12:76: error: parameter packs not expanded with ‘...’:
return std::make_tuple(std::get<sizeof...(I) - 1 - I>(std::forward<T>(t)));
^
foo.cc:12:76: …Run Code Online (Sandbox Code Playgroud) 我知道有更好的方法可以向后打印东西.但由于某种原因,我不能让这个工作.有什么想法吗?
fruit = 'banana'
index = 0
while index < len(fruit):
print fruit[-(index)]
index = index + 1
Run Code Online (Sandbox Code Playgroud) 我正在寻找分解reverse()函数并将其写在代码中以供练习。我最终弄清楚了如何做到这一点(向后逐步浏览原始列表并附加到新的“反向”列表),但想知道为什么这不起作用。
def reverse(list):
newlist = []
index = 0
while index < len(list):
newlist[index] = list[(len(list)) - 1 - index]
index = index + 1
return newlist
list = [1, 2, 3, 4, 5]
print(reverse(list))
Run Code Online (Sandbox Code Playgroud) 我试图扭转句子中的奇怪词.它的工作正常.但它的附加未定义在前面.
var str = "get busy living or get busy dying.";
var newstr = str.split(" "), result;
for(i=0;i<newstr.length;i++){
if(i%2 !== 0){
result += newstr[i].split("").reverse().join("");
result += ' ';
} else {
result += newstr[i];
result += ' ';
}
}
Run Code Online (Sandbox Code Playgroud)
输出是
undefinedget ysub living ro get ysub dying.
Run Code Online (Sandbox Code Playgroud)
有人可以指出我哪里出错!!!!!
下面的方法工作正常,但我找不到使用相同方法打印反转数组的方法.我尝试了 - 每个循环但它打印三个数组而不仅仅是一个.例如,如果输入:
大小5,开始= 1,结束= 5,arr [] = {1,2,3,4,5}
输出:
543215432154321
应该是正确的输出
54321
这是代码:
static void reverse(int[] arr, int start, int end) {
if (start < end) {
int temp = arr[start];
arr[start] = arr[end];
arr[end] = temp;
reverse(arr, start + 1, end - 1);
}
for (int pr : arr) {
System.out.print(pr);
}
}
Run Code Online (Sandbox Code Playgroud) 我有以下列表,并希望颠倒单词的顺序而不是单词中的每个字母.我目前有这个,但它颠倒了每个字母,而不是单词的顺序.
JS:
let items = ["Litte Bike, Tall Tree, Toy Car, Fast Car"].toString();
myArray.split("").reverse().join('')
Run Code Online (Sandbox Code Playgroud)
当前输出:
raC tsaF ,raC yoT ,eerT llaT ,ekiB ettiL
Run Code Online (Sandbox Code Playgroud)
期望的输出:
Bike Litte
Tree Tall
Car Toy
Car Fast
Run Code Online (Sandbox Code Playgroud) 所以我想在 c++ 中做最简单的事情,反转一个字符串(存储新字符串)然后打印它
我的代码是:
char a[size] , reverse[size];
strcpy(a,"dlow olleh " );
for (int i = 0 ; i <= strlen(a); i++) {
reverse[i]= a[strlen(a)-i];
}
cout << reverse ;
Run Code Online (Sandbox Code Playgroud)
我必须注意,当 cout << reverse[i] ; 在 for 循环中,一切都很好,但是当我想将它打印为字符串时,它只是不这样做,我无法理解我错过了什么 cout << reverse[i] ;
std::distance 在 for 循环中返回相同的值,尽管其中一个参数在每个循环中都发生了变化。
#include <vector>
#include <iostream>
using namespace std;
int main() {
vector<int> q{1, 2, 3, 4, 5};
for (auto i = q.rbegin(); i != q.rend(); i++) {
static int index_dif = distance(i, q.rend());
cout << *i << ": " << index_dif << endl;
}
return 0;
}
Run Code Online (Sandbox Code Playgroud)
输出是
5: 5
4: 5
3: 5
2: 5
1: 5
Run Code Online (Sandbox Code Playgroud)
尽管i每个循环都会增加,所以我希望q.rend()它之间的距离随着循环的进行而缩小,如下所示:
5: 5
4: 4
3: 3
2: 2
1: 1
Run Code Online (Sandbox Code Playgroud)
相反,它似乎给人之间的距离q.rbegin()和q.rend() …